
<!DOCTYPE HTML>
<html lang="zh-hans" >
    <head>
        <meta charset="UTF-8">
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
        <title>12.面试题一 · 计算机 ,java , 大数据 基础知识体系</title>
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="description" content="">
        <meta name="generator" content="GitBook 3.2.3">
        <meta name="author" content="hzh">
        
        
    
    <link rel="stylesheet" href="../gitbook/style.css">

    
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-expandable-chapters-small/expandable-chapters-small.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-anchors/plugin.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-anchor-navigation-ex/style/plugin.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-toggle-chapters/toggle.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-back-to-top-button/plugin.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-code/plugin.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-search-pro/search.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-pageview-count/plugin.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                
            
                
                <link rel="stylesheet" href="../gitbook/gitbook-plugin-fontsettings/website.css">
                
            
        

    

    
        
    

        
    
    
    
    <meta name="HandheldFriendly" content="true"/>
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <link rel="apple-touch-icon-precomposed" sizes="152x152" href="../gitbook/images/apple-touch-icon-precomposed-152.png">
    <link rel="shortcut icon" href="../gitbook/images/favicon.ico" type="image/x-icon">

    
    <link rel="next" href="10面试题二.html" />
    
    
    <link rel="prev" href="pond/1.线程池与底层原理.html" />
    

    
    
    
    

    </head>
    <body>
        
<div class="book">
    <div class="book-summary">
        
            
<div id="book-search-input" role="search">
    <input type="text" placeholder="输入并搜索" />
</div>

            
                <nav role="navigation">
                


<ul class="summary">
    
    

    

    
        
        <li class="header">操作系统</li>
        
        
    
        <li class="chapter " data-level="1.1" data-path="../">
            
                <a href="../">
            
                    
                    Introduction
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2" data-path="../操作系统/1.基本概述.html">
            
                <a href="../操作系统/1.基本概述.html">
            
                    
                    1.操作系统基本概述
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.3" data-path="../操作系统/2.进程管理之进程与线程.html">
            
                <a href="../操作系统/2.进程管理之进程与线程.html">
            
                    
                    2.进程管理之进程与线程
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.4" data-path="../操作系统/3.进程管理之处理机调度.html">
            
                <a href="../操作系统/3.进程管理之处理机调度.html">
            
                    
                    3.进程管理之处理机调度
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5" data-path="../操作系统/4.进程管理之进程同步.html">
            
                <a href="../操作系统/4.进程管理之进程同步.html">
            
                    
                    4.进程管理之进程同步
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.6" data-path="../操作系统/5.内存管理之基本概念.html">
            
                <a href="../操作系统/5.内存管理之基本概念.html">
            
                    
                    5.内存管理之基本概念
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.7" data-path="../操作系统/6.内存管理之虚拟内存.html">
            
                <a href="../操作系统/6.内存管理之虚拟内存.html">
            
                    
                    6.内存管理之虚拟内存
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.8" data-path="../操作系统/7.IO设备管理之基本概念.html">
            
                <a href="../操作系统/7.IO设备管理之基本概念.html">
            
                    
                    7.IO设备管理之基本概念
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.9" data-path="../操作系统/8.面试题总结一.html">
            
                <a href="../操作系统/8.面试题总结一.html">
            
                    
                    8.面试题总结一
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">计算机网络篇</li>
        
        
    
        <li class="chapter " data-level="2.1" data-path="../计算机网络/1.计算机网络入门基础概念.html">
            
                <a href="../计算机网络/1.计算机网络入门基础概念.html">
            
                    
                    1.计算机网络入门文章(必读)
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.2" data-path="../计算机网络/2.计算机网络通信基础.html">
            
                <a href="../计算机网络/2.计算机网络通信基础.html">
            
                    
                    2.计算机网络通信入门文章(必读)
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.3" data-path="../计算机网络/3.数据链路层.html">
            
                <a href="../计算机网络/3.数据链路层.html">
            
                    
                    3.数据链路层
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.4" data-path="../计算机网络/4.网络层1.html">
            
                <a href="../计算机网络/4.网络层1.html">
            
                    
                    4.网络层(一)
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.5" data-path="../计算机网络/5.网络层2.html">
            
                <a href="../计算机网络/5.网络层2.html">
            
                    
                    5.网络层(二)
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.6" data-path="../计算机网络/6.传输层.html">
            
                <a href="../计算机网络/6.传输层.html">
            
                    
                    6.传输层
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.7" data-path="../计算机网络/7.应用层.html">
            
                <a href="../计算机网络/7.应用层.html">
            
                    
                    7.应用层(⭐)
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.8" data-path="../计算机网络/10.HTTP相关协议.html">
            
                <a href="../计算机网络/10.HTTP相关协议.html">
            
                    
                    8.HTTP相关及发展
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="2.9" >
            
                <span>
            
                    
                    9.websocket
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="2.10" data-path="../计算机网络/9.面试题二.html">
            
                <a href="../计算机网络/9.面试题二.html">
            
                    
                    面试题总结一
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">数据结构篇</li>
        
        
    
        <li class="chapter " data-level="3.1" data-path="../数据结构/1.图论.html">
            
                <a href="../数据结构/1.图论.html">
            
                    
                    1.图论
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.2" data-path="../数据结构/2.图论例题.html">
            
                <a href="../数据结构/2.图论例题.html">
            
                    
                    2.图论例题
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.3" data-path="../数据结构/3.散列表.html">
            
                <a href="../数据结构/3.散列表.html">
            
                    
                    3.散列表
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.4" data-path="../数据结构/4.排序算法.html">
            
                <a href="../数据结构/4.排序算法.html">
            
                    
                    4.排序算法
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.5" data-path="../数据结构/5.排序列题.html">
            
                <a href="../数据结构/5.排序列题.html">
            
                    
                    5.排序算法例题
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.6" data-path="../数据结构/6.树论.html">
            
                <a href="../数据结构/6.树论.html">
            
                    
                    6.树论
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.7" data-path="../数据结构/7.树论例题.html">
            
                <a href="../数据结构/7.树论例题.html">
            
                    
                    7.树论例题.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.8" data-path="../数据结构/9.模板.html">
            
                <a href="../数据结构/9.模板.html">
            
                    
                    数据结构模板
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">算法篇</li>
        
        
    
        <li class="chapter " data-level="4.1" data-path="../算法/leetCode周赛题解.html">
            
                <a href="../算法/leetCode周赛题解.html">
            
                    
                    leetCode周赛记录
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.2" data-path="../算法/1.时间复杂度.html">
            
                <a href="../算法/1.时间复杂度.html">
            
                    
                    1.时间复杂度
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.3" data-path="../算法/2.深度优先搜索.html">
            
                <a href="../算法/2.深度优先搜索.html">
            
                    
                    2.深度优先搜索算法
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.4" data-path="../算法/2.深度优先搜索题目集.html">
            
                <a href="../算法/2.深度优先搜索题目集.html">
            
                    
                    2.深搜题目集
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.5" data-path="../算法/3.广度优先搜索.html">
            
                <a href="../算法/3.广度优先搜索.html">
            
                    
                    3.广度优先搜索算法
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">JVM篇</li>
        
        
    
        <li class="chapter " data-level="5.1" data-path="../jvm/1.jvm内存结构.html">
            
                <a href="../jvm/1.jvm内存结构.html">
            
                    
                    1.jvm内存结构
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="5.2" data-path="../jvm/2.HotSpot虚拟机对象探秘.html">
            
                <a href="../jvm/2.HotSpot虚拟机对象探秘.html">
            
                    
                    2.HotSpot虚拟机对象探秘.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="5.3" data-path="../jvm/3.对象存亡与垃圾收集算法.html">
            
                <a href="../jvm/3.对象存亡与垃圾收集算法.html">
            
                    
                    3.对象存亡与垃圾收集算法.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="5.4" data-path="../jvm/4.HotSpot的算法细节与垃圾收集器.html">
            
                <a href="../jvm/4.HotSpot的算法细节与垃圾收集器.html">
            
                    
                    4.HotSpot的算法细节与垃圾收集器.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="5.5" data-path="../jvm/5.内存分配与回收策略.html">
            
                <a href="../jvm/5.内存分配与回收策略.html">
            
                    
                    5.内存分配与回收策略.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="5.6" data-path="../jvm/6.类文件结构.html">
            
                <a href="../jvm/6.类文件结构.html">
            
                    
                    6.类文件结构.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="5.7" data-path="../jvm/7.类加载机制.html">
            
                <a href="../jvm/7.类加载机制.html">
            
                    
                    7.类加载机制.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="5.8" data-path="../jvm/8.jvm逃逸分析.html">
            
                <a href="../jvm/8.jvm逃逸分析.html">
            
                    
                    8.逃逸分析技术
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">多线程篇</li>
        
        
    
        <li class="chapter " data-level="6.1" data-path="basic/0.多线程路线图.html">
            
                <a href="basic/0.多线程路线图.html">
            
                    
                    1.多线程学习路线图
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.2" data-path="basic/0.java内存模型与线程.html">
            
                <a href="basic/0.java内存模型与线程.html">
            
                    
                    2.java内存模型与线程
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.3" data-path="3.并行程序基础.html">
            
                <a href="3.并行程序基础.html">
            
                    
                    2.并行程序基础
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.4" data-path="basic/0.jhappenBefore与jvm指令重排.html">
            
                <a href="basic/0.jhappenBefore与jvm指令重排.html">
            
                    
                    3.happenBefore与jvm指令重排序
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.5" data-path="basic/1.synchronized与volatile.html">
            
                <a href="basic/1.synchronized与volatile.html">
            
                    
                    4.synchronized与volatile.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.6" data-path="basic/2.ThreadLocal.html">
            
                <a href="basic/2.ThreadLocal.html">
            
                    
                    5.ThreadLocal.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.7" data-path="cas/1.乐观锁与悲观锁.html">
            
                <a href="cas/1.乐观锁与悲观锁.html">
            
                    
                    6.乐观锁与悲观锁.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.8" data-path="cas/2.CAS与atomic类.html">
            
                <a href="cas/2.CAS与atomic类.html">
            
                    
                    7.CAS与atomic类.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.9" data-path="aqs/1.AQS.html">
            
                <a href="aqs/1.AQS.html">
            
                    
                    8.AQS.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.10" data-path="aqs/2.基于AQS的并发工具.html">
            
                <a href="aqs/2.基于AQS的并发工具.html">
            
                    
                    9.基于AQS的并发工具.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.11" data-path="blockingQueue/1.阻塞队列.html">
            
                <a href="blockingQueue/1.阻塞队列.html">
            
                    
                    10.阻塞队列.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.12" data-path="pond/1.线程池与底层原理.html">
            
                <a href="pond/1.线程池与底层原理.html">
            
                    
                    11.线程池与底层原理.md
            
                </a>
            

            
        </li>
    
        <li class="chapter active" data-level="6.13" data-path="10面试题一.html">
            
                <a href="10面试题一.html">
            
                    
                    12.面试题一
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.14" data-path="10面试题二.html">
            
                <a href="10面试题二.html">
            
                    
                    13.面试题二.md
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">java集合篇</li>
        
        
    
        <li class="chapter " data-level="7.1" data-path="../basic/collection/1.java集合.html">
            
                <a href="../basic/collection/1.java集合.html">
            
                    
                    1.集合架构
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="7.2" data-path="../basic/collection/2.HashMap源码分析.html">
            
                <a href="../basic/collection/2.HashMap源码分析.html">
            
                    
                    2.hashMap底层原理
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="7.3" data-path="../basic/collection/3.ConcurrentHashMap分析.html">
            
                <a href="../basic/collection/3.ConcurrentHashMap分析.html">
            
                    
                    3.ConcurrentHashMap分析
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">设计模式篇</li>
        
        
    
        <li class="chapter " data-level="8.1" >
            
                <span>
            
                    
                    1.创造型模式
            
                </span>
            

            
        </li>
    
        <li class="chapter " data-level="8.2" data-path="../设计模式/factory/三种工厂模式介绍.html">
            
                <a href="../设计模式/factory/三种工厂模式介绍.html">
            
                    
                    三种工厂模式
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="8.3" data-path="../设计模式/factory/实战工厂模式.html">
            
                <a href="../设计模式/factory/实战工厂模式.html">
            
                    
                    实战工厂模式
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="8.4" data-path="../设计模式/factory/实战抽象工厂模式.html">
            
                <a href="../设计模式/factory/实战抽象工厂模式.html">
            
                    
                    实战抽象工厂模式
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">mysql篇</li>
        
        
    
        <li class="chapter " data-level="9.1" data-path="../数据库/mysql/1.b树b+树的底层原理.html">
            
                <a href="../数据库/mysql/1.b树b+树的底层原理.html">
            
                    
                    1.mysql索引基础之b树与b+树⭐⭐
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="9.2" data-path="../数据库/mysql/2.mysql索引.html">
            
                <a href="../数据库/mysql/2.mysql索引.html">
            
                    
                    2.mysql索引及优化⭐⭐⭐⭐
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="9.3" data-path="../数据库/mysql/3.mysql存储引擎.html">
            
                <a href="../数据库/mysql/3.mysql存储引擎.html">
            
                    
                    3.mysql存储引擎.md
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="9.4" data-path="../数据库/mysql/4.多版本并发控制之mvcc原理.html">
            
                <a href="../数据库/mysql/4.多版本并发控制之mvcc原理.html">
            
                    
                    4.多版本并发控制之mvcc原理
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="9.5" data-path="../数据库/mysql/4.mysql事务.html">
            
                <a href="../数据库/mysql/4.mysql事务.html">
            
                    
                    5.mysql事务
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="9.6" data-path="../数据库/mysql/5.mysql锁机制.html">
            
                <a href="../数据库/mysql/5.mysql锁机制.html">
            
                    
                    6.mysql的锁机制
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="9.7" data-path="../数据库/mysql/6.mysql面试题一.html">
            
                <a href="../数据库/mysql/6.mysql面试题一.html">
            
                    
                    7.mysql面试题一
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">高并发中间件篇</li>
        
        
    

    
        
        <li class="header">架构理论篇</li>
        
        
    
        <li class="chapter " data-level="11.1" data-path="../架构/0.架构演进.html">
            
                <a href="../架构/0.架构演进.html">
            
                    
                    1.架构演进
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="11.2" data-path="../架构/0.微服务架构与soa架构.html">
            
                <a href="../架构/0.微服务架构与soa架构.html">
            
                    
                    2.微服务架构与soa架构
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">高可用系统篇</li>
        
        
    
        <li class="chapter " data-level="12.1" data-path="../高可用架构/1.限流.html">
            
                <a href="../高可用架构/1.限流.html">
            
                    
                    1.系统限流
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="12.2" data-path="../高可用系统/2.服务熔断.html">
            
                <a href="../高可用系统/2.服务熔断.html">
            
                    
                    2.服务熔断
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="12.3" data-path="../高可用系统/3.服务降级.html">
            
                <a href="../高可用系统/3.服务降级.html">
            
                    
                    3.服务降级
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">spring-cloud 微服务篇</li>
        
        
    

    

    <li class="divider"></li>

    <li>
        <a href="https://www.gitbook.com" target="blank" class="gitbook-link">
            本书使用 GitBook 发布
        </a>
    </li>
</ul>


                </nav>
            
        
    </div>

    <div class="book-body">
        
            <div class="body-inner">
                
                    

<div class="book-header" role="navigation">
    

    <!-- Title -->
    <h1>
        <i class="fa fa-circle-o-notch fa-spin"></i>
        <a href=".." >12.面试题一</a>
    </h1>
</div>




                    <div class="page-wrapper" tabindex="-1" role="main">
                        <div class="page-inner">
                            
<div id="book-search-results">
    <div class="search-noresults">
    
                                <section class="normal markdown-section">
                                
                                <div id="anchor-navigation-ex-navbar"><i class="fa fa-navicon"></i><ul><ul><li><span class="title-icon "></span><a href="#&#x73B0;&#x5728;&#x6709;t1&#x3001;t2&#x3001;t3&#x4E09;&#x4E2A;&#x7EBF;&#x7A0B;&#xFF0C;&#x4F60;&#x600E;&#x6837;&#x4FDD;&#x8BC1;t2&#x5728;t1&#x6267;&#x884C;&#x5B8C;&#x540E;&#x6267;&#x884C;&#xFF0C;t3&#x5728;t2&#x6267;&#x884C;&#x5B8C;&#x540E;&#x6267;&#x884C;&#xFF1F;"><b></b>&#x73B0;&#x5728;&#x6709;T1&#x3001;T2&#x3001;T3&#x4E09;&#x4E2A;&#x7EBF;&#x7A0B;&#xFF0C;&#x4F60;&#x600E;&#x6837;&#x4FDD;&#x8BC1;T2&#x5728;T1&#x6267;&#x884C;&#x5B8C;&#x540E;&#x6267;&#x884C;&#xFF0C;T3&#x5728;T2&#x6267;&#x884C;&#x5B8C;&#x540E;&#x6267;&#x884C;&#xFF1F;</a></li><li><span class="title-icon "></span><a href="#&#x5728;java&#x4E2D;lock&#x63A5;&#x53E3;&#x6BD4;synchronized&#x5757;&#x7684;&#x4F18;&#x52BF;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;&#x4F60;&#x9700;&#x8981;&#x5B9E;&#x73B0;&#x4E00;&#x4E2A;&#x9AD8;&#x6548;&#x7684;&#x7F13;&#x5B58;&#xFF0C;&#x5B83;&#x5141;&#x8BB8;&#x591A;&#x4E2A;&#x7528;&#x6237;&#x8BFB;&#xFF0C;&#x4F46;&#x53EA;&#x5141;&#x8BB8;&#x4E00;&#x4E2A;&#x7528;&#x6237;&#x5199;&#xFF0C;&#x4EE5;&#x6B64;&#x6765;&#x4FDD;&#x6301;&#x5B83;&#x7684;&#x5B8C;&#x6574;&#x6027;&#xFF0C;&#x4F60;&#x4F1A;&#x600E;&#x6837;&#x53BB;&#x5B9E;&#x73B0;&#x5B83;&#xFF1F;"><b></b>&#x5728;Java&#x4E2D;Lock&#x63A5;&#x53E3;&#x6BD4;synchronized&#x5757;&#x7684;&#x4F18;&#x52BF;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;&#x4F60;&#x9700;&#x8981;&#x5B9E;&#x73B0;&#x4E00;&#x4E2A;&#x9AD8;&#x6548;&#x7684;&#x7F13;&#x5B58;&#xFF0C;&#x5B83;&#x5141;&#x8BB8;&#x591A;&#x4E2A;&#x7528;&#x6237;&#x8BFB;&#xFF0C;&#x4F46;&#x53EA;&#x5141;&#x8BB8;&#x4E00;&#x4E2A;&#x7528;&#x6237;&#x5199;&#xFF0C;&#x4EE5;&#x6B64;&#x6765;&#x4FDD;&#x6301;&#x5B83;&#x7684;&#x5B8C;&#x6574;&#x6027;&#xFF0C;&#x4F60;&#x4F1A;&#x600E;&#x6837;&#x53BB;&#x5B9E;&#x73B0;&#x5B83;&#xFF1F;</a></li><li><span class="title-icon "></span><a href="#&#x5728;java&#x4E2D;wait&#x548C;sleep&#x65B9;&#x6CD5;&#x7684;&#x4E0D;&#x540C;&#xFF1F;"><b></b>&#x5728;java&#x4E2D;wait&#x548C;sleep&#x65B9;&#x6CD5;&#x7684;&#x4E0D;&#x540C;&#xFF1F;</a></li><li><span class="title-icon "></span><a href="#&#x7528;java&#x5B9E;&#x73B0;&#x963B;&#x585E;&#x961F;&#x5217;&#x3002;"><b></b>&#x7528;Java&#x5B9E;&#x73B0;&#x963B;&#x585E;&#x961F;&#x5217;&#x3002;</a></li><ul><li><span class="title-icon "></span><a href="#blockingqueue&#x4ECB;&#x7ECD;&#xFF1A;"><b></b>BlockingQueue&#x4ECB;&#x7ECD;&#xFF1A;</a></li></ul><li><span class="title-icon "></span><a href="#&#x7528;java&#x5199;&#x4EE3;&#x7801;&#x6765;&#x89E3;&#x51B3;&#x751F;&#x4EA7;&#x8005;&#x2014;&#x2014;&#x6D88;&#x8D39;&#x8005;&#x95EE;&#x9898;&#x3002;"><b></b>&#x7528;Java&#x5199;&#x4EE3;&#x7801;&#x6765;&#x89E3;&#x51B3;&#x751F;&#x4EA7;&#x8005;&#x2014;&#x2014;&#x6D88;&#x8D39;&#x8005;&#x95EE;&#x9898;&#x3002;</a></li><li><span class="title-icon "></span><a href="#&#x7528;java&#x5199;&#x4E00;&#x4E2A;&#x4F1A;&#x5BFC;&#x81F4;&#x6B7B;&#x9501;&#x7684;&#x7A0B;&#x5E8F;&#xFF0C;&#x4F60;&#x5C06;&#x600E;&#x4E48;&#x89E3;&#x51B3;&#xFF1F;"><b></b>&#x7528;Java&#x5199;&#x4E00;&#x4E2A;&#x4F1A;&#x5BFC;&#x81F4;&#x6B7B;&#x9501;&#x7684;&#x7A0B;&#x5E8F;&#xFF0C;&#x4F60;&#x5C06;&#x600E;&#x4E48;&#x89E3;&#x51B3;&#xFF1F;</a></li><li><span class="title-icon "></span><a href="#&#x4EC0;&#x4E48;&#x662F;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#xFF0C;java&#x4E2D;&#x7684;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;"><b></b>&#x4EC0;&#x4E48;&#x662F;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#xFF0C;Java&#x4E2D;&#x7684;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;</a></li><li><span class="title-icon "></span><a href="#java&#x4E2D;&#x7684;volatile&#x5173;&#x952E;&#x662F;&#x4EC0;&#x4E48;&#x4F5C;&#x7528;&#xFF1F;&#x600E;&#x6837;&#x4F7F;&#x7528;&#x5B83;&#xFF1F;&#x5728;java&#x4E2D;&#x5B83;&#x8DDF;synchronized&#x65B9;&#x6CD5;&#x6709;&#x4EC0;&#x4E48;&#x4E0D;&#x540C;&#xFF1F;"><b></b>Java&#x4E2D;&#x7684;volatile&#x5173;&#x952E;&#x662F;&#x4EC0;&#x4E48;&#x4F5C;&#x7528;&#xFF1F;&#x600E;&#x6837;&#x4F7F;&#x7528;&#x5B83;&#xFF1F;&#x5728;Java&#x4E2D;&#x5B83;&#x8DDF;synchronized&#x65B9;&#x6CD5;&#x6709;&#x4EC0;&#x4E48;&#x4E0D;&#x540C;&#xFF1F;</a></li><li><span class="title-icon "></span><a href="#&#x4EC0;&#x4E48;&#x662F;&#x7ADE;&#x4E89;&#x6761;&#x4EF6;race-condition&#xFF1F;&#x4F60;&#x600E;&#x6837;&#x53D1;&#x73B0;&#x548C;&#x89E3;&#x51B3;&#x7684;&#xFF1F;"><b></b>&#x4EC0;&#x4E48;&#x662F;&#x7ADE;&#x4E89;&#x6761;&#x4EF6;(race condition)&#xFF1F;&#x4F60;&#x600E;&#x6837;&#x53D1;&#x73B0;&#x548C;&#x89E3;&#x51B3;&#x7684;&#xFF1F;</a></li><li><span class="title-icon "></span><a href="#hhread-jump"><b></b>Hhread Jump</a></li><ul><li><span class="title-icon "></span><a href="#java&#x7EBF;&#x7A0B;&#x7684;&#x72B6;&#x6001;&#x8F6C;&#x6362;&#x4ECB;&#x7ECD;"><b></b>java&#x7EBF;&#x7A0B;&#x7684;&#x72B6;&#x6001;&#x8F6C;&#x6362;&#x4ECB;&#x7ECD;</a></li></ul><li><span class="title-icon "></span><a href="#&#x4E3A;&#x4EC0;&#x4E48;&#x6211;&#x4EEC;&#x8C03;&#x7528;start&#x65B9;&#x6CD5;&#x65F6;&#x4F1A;&#x6267;&#x884C;run&#x65B9;&#x6CD5;&#xFF0C;&#x4E3A;&#x4EC0;&#x4E48;&#x6211;&#x4EEC;&#x4E0D;&#x80FD;&#x76F4;&#x63A5;&#x8C03;&#x7528;run&#x65B9;&#x6CD5;&#xFF1F;"><b></b>&#x4E3A;&#x4EC0;&#x4E48;&#x6211;&#x4EEC;&#x8C03;&#x7528;start()&#x65B9;&#x6CD5;&#x65F6;&#x4F1A;&#x6267;&#x884C;run()&#x65B9;&#x6CD5;&#xFF0C;&#x4E3A;&#x4EC0;&#x4E48;&#x6211;&#x4EEC;&#x4E0D;&#x80FD;&#x76F4;&#x63A5;&#x8C03;&#x7528;run()&#x65B9;&#x6CD5;&#xFF1F;</a></li><li><span class="title-icon "></span><a href="#java&#x4E2D;&#x4F60;&#x600E;&#x6837;&#x5524;&#x9192;&#x4E00;&#x4E2A;&#x963B;&#x585E;&#x7684;&#x7EBF;&#x7A0B;&#xFF1F;"><b></b>Java&#x4E2D;&#x4F60;&#x600E;&#x6837;&#x5524;&#x9192;&#x4E00;&#x4E2A;&#x963B;&#x585E;&#x7684;&#x7EBF;&#x7A0B;&#xFF1F;</a></li><li><span class="title-icon "></span><a href="#&#x5728;java&#x4E2D;cyclibarriar&#x548C;countdownlatch&#x6709;&#x4EC0;&#x4E48;&#x533A;&#x522B;&#xFF1F;"><b></b>&#x5728;Java&#x4E2D;CycliBarriar&#x548C;CountdownLatch&#x6709;&#x4EC0;&#x4E48;&#x533A;&#x522B;&#xFF1F;</a></li><li><span class="title-icon "></span><a href="#&#x4EC0;&#x4E48;&#x662F;&#x4E0D;&#x53EF;&#x53D8;&#x5BF9;&#x8C61;&#xFF0C;&#x5B83;&#x5BF9;&#x5199;&#x5E76;&#x53D1;&#x5E94;&#x7528;&#x6709;&#x4EC0;&#x4E48;&#x5E2E;&#x52A9;&#xFF1F;"><b></b>&#x4EC0;&#x4E48;&#x662F;&#x4E0D;&#x53EF;&#x53D8;&#x5BF9;&#x8C61;&#xFF0C;&#x5B83;&#x5BF9;&#x5199;&#x5E76;&#x53D1;&#x5E94;&#x7528;&#x6709;&#x4EC0;&#x4E48;&#x5E2E;&#x52A9;&#xFF1F;</a></li><li><span class="title-icon "></span><a href="#&#x4F60;&#x5728;&#x591A;&#x7EBF;&#x7A0B;&#x73AF;&#x5883;&#x4E2D;&#x9047;&#x5230;&#x7684;&#x5E38;&#x89C1;&#x7684;&#x95EE;&#x9898;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;&#x4F60;&#x662F;&#x600E;&#x4E48;&#x89E3;&#x51B3;&#x5B83;&#x7684;&#xFF1F;"><b></b>&#x4F60;&#x5728;&#x591A;&#x7EBF;&#x7A0B;&#x73AF;&#x5883;&#x4E2D;&#x9047;&#x5230;&#x7684;&#x5E38;&#x89C1;&#x7684;&#x95EE;&#x9898;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;&#x4F60;&#x662F;&#x600E;&#x4E48;&#x89E3;&#x51B3;&#x5B83;&#x7684;&#xFF1F;</a></li></ul></ul></div><a href="#" id="anchorNavigationExGoTop"><i class="fa fa-arrow-up"></i></a><p>Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;&#x95EE;&#x9898;&#x662F;&#x9762;&#x8BD5;&#x8FC7;&#x7A0B;&#x4E2D;&#x5F88;&#x5BB9;&#x6613;&#x9047;&#x5230;&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x63D0;&#x524D;&#x51C6;&#x5907;&#x662F;&#x89E3;&#x51B3;&#x95EE;&#x9898;&#x7684;&#x6700;&#x597D;&#x529E;&#x6CD5;</p>
<p>(&#x8F6C;&#x8F7D;&#x81EA;<a href="https://blog.csdn.net/qq_34039315/article/details/78432606" target="_blank">https://blog.csdn.net/qq_34039315/article/details/78432606</a>)</p>
<h2 id="&#x73B0;&#x5728;&#x6709;t1&#x3001;t2&#x3001;t3&#x4E09;&#x4E2A;&#x7EBF;&#x7A0B;&#xFF0C;&#x4F60;&#x600E;&#x6837;&#x4FDD;&#x8BC1;t2&#x5728;t1&#x6267;&#x884C;&#x5B8C;&#x540E;&#x6267;&#x884C;&#xFF0C;t3&#x5728;t2&#x6267;&#x884C;&#x5B8C;&#x540E;&#x6267;&#x884C;&#xFF1F;"><a name="&#x73B0;&#x5728;&#x6709;t1&#x3001;t2&#x3001;t3&#x4E09;&#x4E2A;&#x7EBF;&#x7A0B;&#xFF0C;&#x4F60;&#x600E;&#x6837;&#x4FDD;&#x8BC1;t2&#x5728;t1&#x6267;&#x884C;&#x5B8C;&#x540E;&#x6267;&#x884C;&#xFF0C;t3&#x5728;t2&#x6267;&#x884C;&#x5B8C;&#x540E;&#x6267;&#x884C;&#xFF1F;" class="anchor-navigation-ex-anchor" href="#&#x73B0;&#x5728;&#x6709;t1&#x3001;t2&#x3001;t3&#x4E09;&#x4E2A;&#x7EBF;&#x7A0B;&#xFF0C;&#x4F60;&#x600E;&#x6837;&#x4FDD;&#x8BC1;t2&#x5728;t1&#x6267;&#x884C;&#x5B8C;&#x540E;&#x6267;&#x884C;&#xFF0C;t3&#x5728;t2&#x6267;&#x884C;&#x5B8C;&#x540E;&#x6267;&#x884C;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x73B0;&#x5728;&#x6709;t1&#x3001;t2&#x3001;t3&#x4E09;&#x4E2A;&#x7EBF;&#x7A0B;&#xFF0C;&#x4F60;&#x600E;&#x6837;&#x4FDD;&#x8BC1;t2&#x5728;t1&#x6267;&#x884C;&#x5B8C;&#x540E;&#x6267;&#x884C;&#xFF0C;t3&#x5728;t2&#x6267;&#x884C;&#x5B8C;&#x540E;&#x6267;&#x884C;&#xFF1F;" class="plugin-anchor" href="#&#x73B0;&#x5728;&#x6709;t1&#x3001;t2&#x3001;t3&#x4E09;&#x4E2A;&#x7EBF;&#x7A0B;&#xFF0C;&#x4F60;&#x600E;&#x6837;&#x4FDD;&#x8BC1;t2&#x5728;t1&#x6267;&#x884C;&#x5B8C;&#x540E;&#x6267;&#x884C;&#xFF0C;t3&#x5728;t2&#x6267;&#x884C;&#x5B8C;&#x540E;&#x6267;&#x884C;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x73B0;&#x5728;&#x6709;T1&#x3001;T2&#x3001;T3&#x4E09;&#x4E2A;&#x7EBF;&#x7A0B;&#xFF0C;&#x4F60;&#x600E;&#x6837;&#x4FDD;&#x8BC1;T2&#x5728;T1&#x6267;&#x884C;&#x5B8C;&#x540E;&#x6267;&#x884C;&#xFF0C;T3&#x5728;T2&#x6267;&#x884C;&#x5B8C;&#x540E;&#x6267;&#x884C;&#xFF1F;</h2>
<p>&#x8FD9;&#x4E2A;&#x7EBF;&#x7A0B;&#x95EE;&#x9898;&#x901A;&#x5E38;&#x4F1A;&#x5728;&#x7B2C;&#x4E00;&#x8F6E;&#x6216;&#x7535;&#x8BDD;&#x9762;&#x8BD5;&#x9636;&#x6BB5;&#x88AB;&#x95EE;&#x5230;&#xFF0C;&#x76EE;&#x7684;&#x662F;&#x68C0;&#x6D4B;&#x4F60;&#x5BF9;&#x201D;join&#x201D;&#x65B9;&#x6CD5;&#x662F;&#x5426;&#x719F;&#x6089;&#x3002;&#x8FD9;&#x4E2A;&#x591A;&#x7EBF;&#x7A0B;&#x95EE;&#x9898;&#x6BD4;&#x8F83;&#x7B80;&#x5355;&#xFF0C;&#x53EF;&#x4EE5;&#x7528;join&#x65B9;&#x6CD5;&#x5B9E;&#x73B0;&#x3002;</p>
<p>&#x6838;&#x5FC3;&#xFF1A;</p>
<blockquote>
<p>thread.Join&#x628A;&#x6307;&#x5B9A;&#x7684;&#x7EBF;&#x7A0B;&#x52A0;&#x5165;&#x5230;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#xFF0C;&#x53EF;&#x4EE5;&#x5C06;&#x4E24;&#x4E2A;&#x4EA4;&#x66FF;&#x6267;&#x884C;&#x7684;&#x7EBF;&#x7A0B;&#x5408;&#x5E76;&#x4E3A;&#x987A;&#x5E8F;&#x6267;&#x884C;&#x7684;&#x7EBF;&#x7A0B;&#x3002;
&#x6BD4;&#x5982;&#x5728;&#x7EBF;&#x7A0B;B&#x4E2D;&#x8C03;&#x7528;&#x4E86;&#x7EBF;&#x7A0B;A&#x7684;Join()&#x65B9;&#x6CD5;&#xFF0C;&#x76F4;&#x5230;&#x7EBF;&#x7A0B;A&#x6267;&#x884C;&#x5B8C;&#x6BD5;&#x540E;&#xFF0C;&#x624D;&#x4F1A;&#x7EE7;&#x7EED;&#x6267;&#x884C;&#x7EBF;&#x7A0B;B&#x3002;
&#x60F3;&#x8981;&#x66F4;&#x6DF1;&#x5165;&#x4E86;&#x89E3;&#xFF0C;&#x5EFA;&#x8BAE;&#x770B;&#x4E00;&#x4E0B;join&#x7684;&#x6E90;&#x7801;&#xFF0C;&#x4E5F;&#x5F88;&#x7B80;&#x5355;&#x7684;&#xFF0C;&#x4F7F;&#x7528;wait&#x65B9;&#x6CD5;&#x5B9E;&#x73B0;&#x7684;&#x3002;</p>
<p>t.join(); //&#x8C03;&#x7528;join&#x65B9;&#x6CD5;&#xFF0C;&#x7B49;&#x5F85;&#x7EBF;&#x7A0B;t&#x6267;&#x884C;&#x5B8C;&#x6BD5;
t.join(1000); //&#x7B49;&#x5F85; t &#x7EBF;&#x7A0B;&#xFF0C;&#x7B49;&#x5F85;&#x65F6;&#x95F4;&#x662F;1000&#x6BEB;&#x79D2;&#x3002;</p>
</blockquote>
<p>&#x4EE3;&#x7801;&#x5B9E;&#x73B0;&#xFF1A;</p>
<pre><code>public static void main(String[] args) {
        method01();
        method02();
    }

    /**
     * &#x7B2C;&#x4E00;&#x79CD;&#x5B9E;&#x73B0;&#x65B9;&#x5F0F;&#xFF0C;&#x987A;&#x5E8F;&#x5199;&#x6B7B;&#x5728;&#x7EBF;&#x7A0B;&#x4EE3;&#x7801;&#x7684;&#x5185;&#x90E8;&#x4E86;&#xFF0C;&#x6709;&#x65F6;&#x5019;&#x4E0D;&#x65B9;&#x4FBF;
     */
    private static void method01() {
        Thread t1 = new Thread(new Runnable() {
            @Override public void run() {
                System.out.println(&quot;t1 is finished&quot;);
            }
        });
        Thread t2 = new Thread(new Runnable() {
            @Override public void run() {
                try {
                    t1.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(&quot;t2 is finished&quot;);
            }
        });
        Thread t3 = new Thread(new Runnable() {
            @Override public void run() {
                try {
                    t2.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(&quot;t3 is finished&quot;);
            }
        });

        t3.start();
        t2.start();
        t1.start();
    }


    /**
     * &#x7B2C;&#x4E8C;&#x79CD;&#x5B9E;&#x73B0;&#x65B9;&#x5F0F;&#xFF0C;&#x7EBF;&#x7A0B;&#x6267;&#x884C;&#x987A;&#x5E8F;&#x53EF;&#x4EE5;&#x5728;&#x65B9;&#x6CD5;&#x4E2D;&#x8C03;&#x6362;
     */
    private static void method02(){
        Runnable runnable = new Runnable() {
            @Override public void run() {
                System.out.println(Thread.currentThread().getName() + &quot;&#x6267;&#x884C;&#x5B8C;&#x6210;&quot;);
            }
        };
        Thread t1 = new Thread(runnable, &quot;t1&quot;);
        Thread t2 = new Thread(runnable, &quot;t2&quot;);
        Thread t3 = new Thread(runnable, &quot;t3&quot;);
        try {
            t1.start();
            t1.join();
            t2.start();
            t2.join();
            t3.start();
            t3.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
</code></pre><h2 id="&#x5728;java&#x4E2D;lock&#x63A5;&#x53E3;&#x6BD4;synchronized&#x5757;&#x7684;&#x4F18;&#x52BF;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;&#x4F60;&#x9700;&#x8981;&#x5B9E;&#x73B0;&#x4E00;&#x4E2A;&#x9AD8;&#x6548;&#x7684;&#x7F13;&#x5B58;&#xFF0C;&#x5B83;&#x5141;&#x8BB8;&#x591A;&#x4E2A;&#x7528;&#x6237;&#x8BFB;&#xFF0C;&#x4F46;&#x53EA;&#x5141;&#x8BB8;&#x4E00;&#x4E2A;&#x7528;&#x6237;&#x5199;&#xFF0C;&#x4EE5;&#x6B64;&#x6765;&#x4FDD;&#x6301;&#x5B83;&#x7684;&#x5B8C;&#x6574;&#x6027;&#xFF0C;&#x4F60;&#x4F1A;&#x600E;&#x6837;&#x53BB;&#x5B9E;&#x73B0;&#x5B83;&#xFF1F;"><a name="&#x5728;java&#x4E2D;lock&#x63A5;&#x53E3;&#x6BD4;synchronized&#x5757;&#x7684;&#x4F18;&#x52BF;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;&#x4F60;&#x9700;&#x8981;&#x5B9E;&#x73B0;&#x4E00;&#x4E2A;&#x9AD8;&#x6548;&#x7684;&#x7F13;&#x5B58;&#xFF0C;&#x5B83;&#x5141;&#x8BB8;&#x591A;&#x4E2A;&#x7528;&#x6237;&#x8BFB;&#xFF0C;&#x4F46;&#x53EA;&#x5141;&#x8BB8;&#x4E00;&#x4E2A;&#x7528;&#x6237;&#x5199;&#xFF0C;&#x4EE5;&#x6B64;&#x6765;&#x4FDD;&#x6301;&#x5B83;&#x7684;&#x5B8C;&#x6574;&#x6027;&#xFF0C;&#x4F60;&#x4F1A;&#x600E;&#x6837;&#x53BB;&#x5B9E;&#x73B0;&#x5B83;&#xFF1F;" class="anchor-navigation-ex-anchor" href="#&#x5728;java&#x4E2D;lock&#x63A5;&#x53E3;&#x6BD4;synchronized&#x5757;&#x7684;&#x4F18;&#x52BF;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;&#x4F60;&#x9700;&#x8981;&#x5B9E;&#x73B0;&#x4E00;&#x4E2A;&#x9AD8;&#x6548;&#x7684;&#x7F13;&#x5B58;&#xFF0C;&#x5B83;&#x5141;&#x8BB8;&#x591A;&#x4E2A;&#x7528;&#x6237;&#x8BFB;&#xFF0C;&#x4F46;&#x53EA;&#x5141;&#x8BB8;&#x4E00;&#x4E2A;&#x7528;&#x6237;&#x5199;&#xFF0C;&#x4EE5;&#x6B64;&#x6765;&#x4FDD;&#x6301;&#x5B83;&#x7684;&#x5B8C;&#x6574;&#x6027;&#xFF0C;&#x4F60;&#x4F1A;&#x600E;&#x6837;&#x53BB;&#x5B9E;&#x73B0;&#x5B83;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x5728;java&#x4E2D;lock&#x63A5;&#x53E3;&#x6BD4;synchronized&#x5757;&#x7684;&#x4F18;&#x52BF;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;&#x4F60;&#x9700;&#x8981;&#x5B9E;&#x73B0;&#x4E00;&#x4E2A;&#x9AD8;&#x6548;&#x7684;&#x7F13;&#x5B58;&#xFF0C;&#x5B83;&#x5141;&#x8BB8;&#x591A;&#x4E2A;&#x7528;&#x6237;&#x8BFB;&#xFF0C;&#x4F46;&#x53EA;&#x5141;&#x8BB8;&#x4E00;&#x4E2A;&#x7528;&#x6237;&#x5199;&#xFF0C;&#x4EE5;&#x6B64;&#x6765;&#x4FDD;&#x6301;&#x5B83;&#x7684;&#x5B8C;&#x6574;&#x6027;&#xFF0C;&#x4F60;&#x4F1A;&#x600E;&#x6837;&#x53BB;&#x5B9E;&#x73B0;&#x5B83;&#xFF1F;" class="plugin-anchor" href="#&#x5728;java&#x4E2D;lock&#x63A5;&#x53E3;&#x6BD4;synchronized&#x5757;&#x7684;&#x4F18;&#x52BF;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;&#x4F60;&#x9700;&#x8981;&#x5B9E;&#x73B0;&#x4E00;&#x4E2A;&#x9AD8;&#x6548;&#x7684;&#x7F13;&#x5B58;&#xFF0C;&#x5B83;&#x5141;&#x8BB8;&#x591A;&#x4E2A;&#x7528;&#x6237;&#x8BFB;&#xFF0C;&#x4F46;&#x53EA;&#x5141;&#x8BB8;&#x4E00;&#x4E2A;&#x7528;&#x6237;&#x5199;&#xFF0C;&#x4EE5;&#x6B64;&#x6765;&#x4FDD;&#x6301;&#x5B83;&#x7684;&#x5B8C;&#x6574;&#x6027;&#xFF0C;&#x4F60;&#x4F1A;&#x600E;&#x6837;&#x53BB;&#x5B9E;&#x73B0;&#x5B83;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x5728;Java&#x4E2D;Lock&#x63A5;&#x53E3;&#x6BD4;synchronized&#x5757;&#x7684;&#x4F18;&#x52BF;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;&#x4F60;&#x9700;&#x8981;&#x5B9E;&#x73B0;&#x4E00;&#x4E2A;&#x9AD8;&#x6548;&#x7684;&#x7F13;&#x5B58;&#xFF0C;&#x5B83;&#x5141;&#x8BB8;&#x591A;&#x4E2A;&#x7528;&#x6237;&#x8BFB;&#xFF0C;&#x4F46;&#x53EA;&#x5141;&#x8BB8;&#x4E00;&#x4E2A;&#x7528;&#x6237;&#x5199;&#xFF0C;&#x4EE5;&#x6B64;&#x6765;&#x4FDD;&#x6301;&#x5B83;&#x7684;&#x5B8C;&#x6574;&#x6027;&#xFF0C;&#x4F60;&#x4F1A;&#x600E;&#x6837;&#x53BB;&#x5B9E;&#x73B0;&#x5B83;&#xFF1F;</h2>
<p>&#x8FD9;&#x4E2A;&#x9898;&#x7684;&#x539F;&#x7B54;&#x6848;&#x6211;&#x8BA4;&#x4E3A;&#x4E0D;&#x662F;&#x5F88;&#x5168;&#x9762;&#x3002;
Lock&#x63A5;&#x53E3; &#x548C; ReadWriteLock&#x63A5;&#x53E3; &#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code>public interface Lock {
    void lock();
    void lockInterruptibly() throws InterruptedException;
    boolean tryLock();
    boolean tryLock(long time, TimeUnit unit) throws InterruptedException;
    void unlock();
    Condition newCondition();
}

public interface ReadWriteLock {
    Lock readLock();
    Lock writeLock();
}
</code></pre><p>&#x6574;&#x4F53;&#x4E0A;&#x6765;&#x8BF4;Lock&#x662F;synchronized&#x7684;&#x6269;&#x5C55;&#x7248;&#xFF0C;Lock&#x63D0;&#x4F9B;&#x4E86;&#x65E0;&#x6761;&#x4EF6;&#x7684;&#x3001;&#x53EF;&#x8F6E;&#x8BE2;&#x7684;(tryLock&#x65B9;&#x6CD5;)&#x3001;&#x5B9A;&#x65F6;&#x7684;(tryLock&#x5E26;&#x53C2;&#x65B9;&#x6CD5;)&#x3001;&#x53EF;&#x4E2D;&#x65AD;&#x7684;(lockInterruptibly)&#x3001;&#x53EF;&#x591A;&#x6761;&#x4EF6;&#x961F;&#x5217;&#x7684;(newCondition&#x65B9;&#x6CD5;)&#x9501;&#x64CD;&#x4F5C;&#x3002;&#x53E6;&#x5916;Lock&#x7684;&#x5B9E;&#x73B0;&#x7C7B;&#x57FA;&#x672C;&#x90FD;&#x652F;&#x6301;&#x975E;&#x516C;&#x5E73;&#x9501;(&#x9ED8;&#x8BA4;)&#x548C;&#x516C;&#x5E73;&#x9501;&#xFF0C;synchronized&#x53EA;&#x652F;&#x6301;&#x975E;&#x516C;&#x5E73;&#x9501;&#xFF0C;&#x5F53;&#x7136;&#xFF0C;&#x5728;&#x5927;&#x90E8;&#x5206;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x975E;&#x516C;&#x5E73;&#x9501;&#x662F;&#x9AD8;&#x6548;&#x7684;&#x9009;&#x62E9;&#x3002;</p>
<p>ReadWriteLock&#x662F;&#x5BF9;Lock&#x7684;&#x8FD0;&#x7528;&#xFF0C;&#x5177;&#x4F53;&#x7684;&#x5B9E;&#x73B0;&#x7C7B;&#x662F; ReentrantReadWriteLock &#xFF0C;&#x4E0B;&#x9762;&#x7528;&#x8FD9;&#x4E2A;&#x7C7B;&#x6765;&#x5B9E;&#x73B0;&#x8BFB;&#x5199;&#x7C7B;&#x578B;&#x7684;&#x9AD8;&#x6548;&#x7F13;&#x5B58;&#xFF1A;</p>
<pre><code>import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

/**
 * &#x7528;ReadWriteLock&#x8BFB;&#x5199;&#x9501;&#x6765;&#x5B9E;&#x73B0;&#x4E00;&#x4E2A;&#x9AD8;&#x6548;&#x7684;Map&#x7F13;&#x5B58;
 * Created by LEO on 2017/10/30.
 */
public class ReaderAndWriter&lt;K, V&gt; {
    private final ReadWriteLock lock = new ReentrantReadWriteLock();
    private final Lock readLock = lock.readLock();
    private final Lock writeLock = lock.writeLock();
    private final Map&lt;K, V&gt; map;

    public ReaderAndWriter(Map&lt;K, V&gt; map) {
        this.map = map;
    }

    /*************   &#x8FD9;&#x662F;&#x7528;lock()&#x65B9;&#x6CD5;&#x5199;&#x7684;   ********************/
//    public V put(K key, V value){
//        writeLock.lock();
//        try {
//            return map.put(key, value);
//        }finally {
//            writeLock.unlock();
//        }
//    }
//    public V get(K key){
//        readLock.lock();
//        try {
//            return map.get(key);
//        }finally {
//            readLock.unlock();
//        }
//    }

    /*************   &#x8FD9;&#x662F;&#x7528;tryLock()&#x65B9;&#x6CD5;&#x5199;&#x7684;   ********************/
    public V put(K key, V value){
        while (true){
            if(writeLock.tryLock()){
                try {
                    System.out.println(&quot;put &quot;+ key +&quot; = &quot; + value);
                    return map.put(key, value);
                }finally {
                    writeLock.unlock();
                }
            }
        }
    }
    public V get(K key){
        while (true){
            if (readLock.tryLock()) {
                try {
                    V v = map.get(key);
                    System.out.println(&quot;get &quot;+ key +&quot; = &quot; + v);
                    return v;
                } finally {
                    readLock.unlock();
                }
            }
        }
    }


    /********************    &#x4E0B;&#x9762;&#x662F;&#x6D4B;&#x8BD5;&#x533A;       *********************************/
    public static void main(String[] args) {
        final ReaderAndWriter&lt;String, Integer&gt; rw = new ReaderAndWriter&lt;&gt;(new HashMap&lt;&gt;());
        ExecutorService exec = Executors.newCachedThreadPool();
        for (int i = 0; i &lt; 100; i++) {
            exec.execute(new TestRunnable(rw));
        }
        exec.shutdown();
    }

    static class TestRunnable implements Runnable{
        private final ReaderAndWriter&lt;String, Integer&gt; rw;
        private final String KEY = &quot;x&quot;;

        TestRunnable(ReaderAndWriter&lt;String, Integer&gt; rw) {
            this.rw = rw;
        }

        @Override
        public void run() {
            Random random = new Random();
            int r = random.nextInt(100);
            //&#x751F;&#x6210;&#x968F;&#x673A;&#x6570;&#xFF0C;&#x5C0F;&#x4E8E;30&#x7684;&#x5199;&#x5165;&#x7F13;&#x5B58;&#xFF0C;&#x5927;&#x4E8E;&#x7B49;&#x4E8E;30&#x5219;&#x8BFB;&#x53D6;&#x6570;&#x5B57;
            if (r &lt; 30){
                rw.put(KEY, r);
            } else {
                rw.get(KEY);
            }
        }
    }
}
</code></pre><h2 id="&#x5728;java&#x4E2D;wait&#x548C;sleep&#x65B9;&#x6CD5;&#x7684;&#x4E0D;&#x540C;&#xFF1F;"><a name="&#x5728;java&#x4E2D;wait&#x548C;sleep&#x65B9;&#x6CD5;&#x7684;&#x4E0D;&#x540C;&#xFF1F;" class="anchor-navigation-ex-anchor" href="#&#x5728;java&#x4E2D;wait&#x548C;sleep&#x65B9;&#x6CD5;&#x7684;&#x4E0D;&#x540C;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x5728;java&#x4E2D;wait&#x548C;sleep&#x65B9;&#x6CD5;&#x7684;&#x4E0D;&#x540C;&#xFF1F;" class="plugin-anchor" href="#&#x5728;java&#x4E2D;wait&#x548C;sleep&#x65B9;&#x6CD5;&#x7684;&#x4E0D;&#x540C;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x5728;java&#x4E2D;wait&#x548C;sleep&#x65B9;&#x6CD5;&#x7684;&#x4E0D;&#x540C;&#xFF1F;</h2>
<p>&#x901A;&#x5E38;&#x4F1A;&#x5728;&#x7535;&#x8BDD;&#x9762;&#x8BD5;&#x4E2D;&#x7ECF;&#x5E38;&#x88AB;&#x95EE;&#x5230;&#x7684;Java&#x7EBF;&#x7A0B;&#x9762;&#x8BD5;&#x95EE;&#x9898;&#x3002;
&#x6700;&#x5927;&#x7684;&#x4E0D;&#x540C;&#x662F;&#x5728;&#x7B49;&#x5F85;&#x65F6;wait&#x4F1A;&#x91CA;&#x653E;&#x9501;&#xFF0C;&#x800C;sleep&#x4E00;&#x76F4;&#x6301;&#x6709;&#x9501;&#x3002;Wait&#x901A;&#x5E38;&#x88AB;&#x7528;&#x4E8E;&#x7EBF;&#x7A0B;&#x95F4;&#x4EA4;&#x4E92;&#xFF0C;sleep&#x901A;&#x5E38;&#x88AB;&#x7528;&#x4E8E;&#x6682;&#x505C;&#x6267;&#x884C;&#x3002;</p>
<p>&#x6B64;&#x5904;&#x6211;&#x60F3;&#x7406;&#x4E00;&#x4E0B;Java&#x591A;&#x7EBF;&#x7A0B;&#x7684;&#x57FA;&#x7840;&#x77E5;&#x8BC6;&#xFF1A;
- Java&#x7684;&#x591A;&#x7EBF;&#x7A0B;&#x9501;&#x662F;&#x6302;&#x5728;&#x5BF9;&#x8C61;&#x4E0A;&#x7684;&#xFF0C;&#x5E76;&#x4E0D;&#x662F;&#x5728;&#x65B9;&#x6CD5;&#x4E0A;&#x7684;&#x3002;&#x5373;&#x6BCF;&#x4E2A;&#x5BF9;&#x8C61;&#x90FD;&#x6709;&#x4E00;&#x4E2A;&#x9501;&#xFF0C;&#x5F53;&#x9047;&#x5230;&#x7C7B;&#x4F3C;synchronized&#x7684;&#x540C;&#x6B65;&#x9700;&#x8981;&#x65F6;&#xFF0C;&#x5C31;&#x4F1A;&#x76D1;&#x89C6;(monitor)&#x6BCF;&#x4E2A;&#x60F3;&#x4F7F;&#x7528;&#x672C;&#x5BF9;&#x8C61;&#x7684;&#x7EBF;&#x7A0B;&#x6309;&#x7167;&#x4E00;&#x5B9A;&#x7684;&#x89C4;&#x5219;&#x6765;&#x8BBF;&#x95EE;&#xFF0C;&#x89C4;&#x5219;&#x4E5F;&#x5C31;&#x662F;&#x5728;&#x540C;&#x4E00;&#x65F6;&#x95F4;&#x5185;&#x53EA;&#x80FD;&#x6709;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x80FD;&#x8BBF;&#x95EE;&#x6B64;&#x5BF9;&#x8C61;&#x3002;
- Java&#x4E2D;&#x83B7;&#x53D6;&#x9501;&#x7684;&#x5355;&#x4F4D;&#x662F;&#x7EBF;&#x7A0B;&#x3002;&#x5F53;&#x7EBF;&#x7A0B;A&#x83B7;&#x53D6;&#x4E86;&#x5BF9;&#x8C61;B&#x7684;&#x9501;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x5BF9;&#x8C61;B&#x7684;&#x6301;&#x6709;&#x6807;&#x8BB0;&#x4E0A;&#x5199;&#x7684;&#x662F;&#x7EBF;&#x7A0B;A&#x7684;&#x552F;&#x4E00;&#x6807;&#x8BC6;&#xFF0C;&#x5728;&#x9700;&#x8981;&#x540C;&#x6B65;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x7684;&#x8BDD;&#xFF0C;&#x53EA;&#x6709;&#x7EBF;&#x7A0B;A&#x80FD;&#x8BBF;&#x95EE;&#x5BF9;&#x8C61;B&#x3002;
- Thread&#x5E38;&#x7528;&#x65B9;&#x6CD5;&#x6709;&#xFF1A;start/stop/yield/sleep/interrupt/join&#x7B49;&#xFF0C;&#x4ED6;&#x4EEC;&#x662F;&#x7EBF;&#x7A0B;&#x7EA7;&#x522B;&#x7684;&#x65B9;&#x6CD5;&#xFF0C;&#x6240;&#x4EE5;&#x5E76;&#x4E0D;&#x4F1A;&#x592A;&#x5173;&#x5FC3;&#x9501;&#x7684;&#x5177;&#x4F53;&#x903B;&#x8F91;&#x3002;
- Object&#x7684;&#x7EBF;&#x7A0B;&#x6709;&#x5173;&#x65B9;&#x6CD5;&#x662F;&#xFF1A;wait/wait(&#x4E8B;&#x4EF6;&#x53C2;&#x6570;)/notify/notifyAll&#xFF0C;&#x4ED6;&#x4EEC;&#x662F;&#x5BF9;&#x8C61;&#x7684;&#x65B9;&#x6CD5;&#xFF0C;&#x6240;&#x4EE5;&#x4F7F;&#x7528;&#x7684;&#x65F6;&#x5019;&#x5C31;&#x6709;&#x70B9;&#x618B;&#x5C48;&#x4E86;&#xFF0C;&#x5FC5;&#x987B;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x83B7;&#x53D6;&#x4E86;&#x672C;&#x5BF9;&#x8C61;&#x7684;&#x9501;&#x624D;&#x80FD;&#x4F7F;&#x7528;&#xFF0C;&#x5426;&#x5219;&#x4F1A;&#x62A5;&#x5F02;&#x5E38;&#x3002;&#x4F46;&#x4ED6;&#x4EEC;&#x80FD;&#x66F4;&#x7EC6;&#x7C92;&#x5EA6;&#x7684;&#x63A7;&#x5236;&#x9501;&#xFF0C;&#x53EF;&#x4EE5;&#x91CA;&#x653E;&#x9501;&#x3002;</p>
<h2 id="&#x7528;java&#x5B9E;&#x73B0;&#x963B;&#x585E;&#x961F;&#x5217;&#x3002;"><a name="&#x7528;java&#x5B9E;&#x73B0;&#x963B;&#x585E;&#x961F;&#x5217;&#x3002;" class="anchor-navigation-ex-anchor" href="#&#x7528;java&#x5B9E;&#x73B0;&#x963B;&#x585E;&#x961F;&#x5217;&#x3002;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x7528;java&#x5B9E;&#x73B0;&#x963B;&#x585E;&#x961F;&#x5217;&#x3002;" class="plugin-anchor" href="#&#x7528;java&#x5B9E;&#x73B0;&#x963B;&#x585E;&#x961F;&#x5217;&#x3002;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x7528;Java&#x5B9E;&#x73B0;&#x963B;&#x585E;&#x961F;&#x5217;&#x3002;</h2>
<p>&#x8FD9;&#x662F;&#x4E00;&#x4E2A;&#x76F8;&#x5BF9;&#x8270;&#x96BE;&#x7684;&#x591A;&#x7EBF;&#x7A0B;&#x9762;&#x8BD5;&#x95EE;&#x9898;&#xFF0C;&#x5B83;&#x80FD;&#x8FBE;&#x5230;&#x5F88;&#x591A;&#x7684;&#x76EE;&#x7684;&#x3002;&#x7B2C;&#x4E00;&#xFF0C;&#x5B83;&#x53EF;&#x4EE5;&#x68C0;&#x6D4B;&#x4FAF;&#x9009;&#x8005;&#x662F;&#x5426;&#x80FD;&#x5B9E;&#x9645;&#x7684;&#x7528;Java&#x7EBF;&#x7A0B;&#x5199;&#x7A0B;&#x5E8F;&#xFF1B;&#x7B2C;&#x4E8C;&#xFF0C;&#x53EF;&#x4EE5;&#x68C0;&#x6D4B;&#x4FAF;&#x9009;&#x8005;&#x5BF9;&#x5E76;&#x53D1;&#x573A;&#x666F;&#x7684;&#x7406;&#x89E3;&#xFF0C;&#x5E76;&#x4E14;&#x4F60;&#x53EF;&#x4EE5;&#x6839;&#x636E;&#x8FD9;&#x4E2A;&#x95EE;&#x5F88;&#x591A;&#x95EE;&#x9898;&#x3002;&#x5982;&#x679C;&#x4ED6;&#x7528;wait()&#x548C;notify()&#x65B9;&#x6CD5;&#x6765;&#x5B9E;&#x73B0;&#x963B;&#x585E;&#x961F;&#x5217;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x8981;&#x6C42;&#x4ED6;&#x7528;&#x6700;&#x65B0;&#x7684;Java 5&#x4E2D;&#x7684;&#x5E76;&#x53D1;&#x7C7B;&#x6765;&#x518D;&#x5199;&#x4E00;&#x6B21;&#x3002;</p>
<p>&#x4E0B;&#x9762;&#x662F;&#x5B9E;&#x73B0;&#x4E86;&#x963B;&#x585E;&#x7684;take&#x548C;put&#x65B9;&#x6CD5;&#x7684;&#x963B;&#x585E;&#x961F;&#x5217;&#xFF08;&#x5206;&#x522B;&#x7528;synchronized &#x548C; wait/notify &#x5B9E;&#x73B0;&#xFF09;&#xFF1A;</p>
<pre><code>import java.util.LinkedList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * &#x5B9E;&#x73B0;&#x4E86;&#x963B;&#x585E;&#x7684;take&#x548C;put&#x65B9;&#x6CD5;&#x7684;&#x963B;&#x585E;&#x961F;&#x5217;
 *      &#x5206;&#x522B;&#x7528;synchronized &#x548C; wait/notify &#x5B9E;&#x73B0;
 * @author xuexiaolei
 * @version 2017&#x5E74;11&#x6708;01&#x65E5;
 */
public class MyBlocingQueue&lt;E&gt; {
    private final List list;
    private final int limit;//&#x6709;&#x5927;&#x5C0F;&#x9650;&#x5236;&#x7684;

    public MyBlocingQueue(int limit) {
        this.limit = limit;
        this.list = new LinkedList&lt;E&gt;();
    }

    //&#x8FD9;&#x662F;&#x7528;synchronized&#x5199;&#x7684;,&#x5728;list&#x7A7A;&#x6216;&#x8005;&#x6EE1;&#x7684;&#x65F6;&#x5019;&#x6548;&#x7387;&#x4F1A;&#x4F4E;&#xFF0C;&#x56E0;&#x4E3A;&#x4F1A;&#x4E00;&#x76F4;&#x8F6E;&#x8BE2;
//    public void put(E e){
//        while(true){
//            synchronized (list){
//                if (list.size() &lt; limit) {
//                    System.out.println(&quot;list : &quot; + list.toString());
//                    System.out.println(&quot;put : &quot; + e);
//                    list.add(e);
//                    return;
//                }
//            }
//        }
//    }
//    public E take(){
//        while (true) {
//            synchronized (list) {
//                if (list.size() &gt; 0){
//                    System.out.println(&quot;list : &quot; + list.toString());
//                    E remove = (E) list.remove(0);
//                    System.out.println(&quot;take : &quot; + remove);
//                    return remove;
//                }
//            }
//        }
//    }

    //&#x7528;wait&#xFF0C;notify&#x5199;&#x7684;,&#x5728;list&#x7A7A;&#x6216;&#x8005;&#x6EE1;&#x7684;&#x65F6;&#x5019;&#x6548;&#x7387;&#x4F1A;&#x9AD8;&#x4E00;&#x70B9;&#xFF0C;&#x56E0;&#x4E3A;wait&#x91CA;&#x653E;&#x9501;&#xFF0C;&#x7136;&#x540E;&#x7B49;&#x5F85;&#x5524;&#x9192;
    public synchronized void put(E e){
        while (list.size() == limit){
            try {
                wait();
            } catch (InterruptedException e1) {
                e1.printStackTrace();
            }
        }
        System.out.println(&quot;list : &quot; + list.toString());
        System.out.println(&quot;put : &quot; + e);
        list.add(e);
        notifyAll();
    }
    public synchronized E take() {
        while (list.size() == 0){
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println(&quot;list : &quot; + list.toString());
        E remove = (E) list.remove(0);
        System.out.println(&quot;take : &quot; + remove);
        notifyAll();
        return remove;
    }


    /********************    &#x4E0B;&#x9762;&#x662F;&#x6D4B;&#x8BD5;&#x533A;       *********************************/
    public static void main(String[] args) {
        final MyBlocingQueue&lt;Integer&gt; myBlocingQueue = new MyBlocingQueue(10);
        ExecutorService exec = Executors.newCachedThreadPool();
        for (int i = 0; i &lt; 100; i++) {
            exec.execute(new TestRunnable(myBlocingQueue));
        }
        exec.shutdown();
    }

    static class TestRunnable implements Runnable{
        private final MyBlocingQueue&lt;Integer&gt; myBlocingQueue;

        TestRunnable(MyBlocingQueue&lt;Integer&gt; myBlocingQueue) {
            this.myBlocingQueue = myBlocingQueue;
        }

        @Override
        public void run() {
            Random random = new Random();
            int r = random.nextInt(100);
            //&#x751F;&#x6210;&#x968F;&#x673A;&#x6570;,&#x6309;&#x7167;&#x4E00;&#x5B9A;&#x6BD4;&#x7387;&#x8BFB;&#x53D6;&#x6216;&#x8005;&#x653E;&#x5165;&#xFF0C;&#x53EF;&#x4EE5;&#x66F4;&#x6539;&#xFF01;&#xFF01;&#xFF01;
            if (r &lt; 30){
                myBlocingQueue.put(r);
            } else {
                myBlocingQueue.take();
            }
        }
    }
}
</code></pre><h3 id="blockingqueue&#x4ECB;&#x7ECD;&#xFF1A;"><a name="blockingqueue&#x4ECB;&#x7ECD;&#xFF1A;" class="anchor-navigation-ex-anchor" href="#blockingqueue&#x4ECB;&#x7ECD;&#xFF1A;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="blockingqueue&#x4ECB;&#x7ECD;&#xFF1A;" class="plugin-anchor" href="#blockingqueue&#x4ECB;&#x7ECD;&#xFF1A;"><i class="fa fa-link" aria-hidden="true"></i></a>BlockingQueue&#x4ECB;&#x7ECD;&#xFF1A;</h3>
<p>Java5&#x4E2D;&#x63D0;&#x4F9B;&#x4E86;BlockingQueue&#x7684;&#x65B9;&#x6CD5;&#xFF0C;&#x5E76;&#x4E14;&#x6709;&#x51E0;&#x4E2A;&#x5B9E;&#x73B0;&#xFF0C;&#x5728;&#x6B64;&#x4ECB;&#x7ECD;&#x4E00;&#x4E0B;&#x3002;</p>
<p>BlockingQueue &#x5177;&#x6709; 4 &#x7EC4;&#x4E0D;&#x540C;&#x7684;&#x65B9;&#x6CD5;&#x7528;&#x4E8E;&#x63D2;&#x5165;&#x3001;&#x79FB;&#x9664;&#x4EE5;&#x53CA;&#x5BF9;&#x961F;&#x5217;&#x4E2D;&#x7684;&#x5143;&#x7D20;&#x8FDB;&#x884C;&#x68C0;&#x67E5;&#x3002;&#x5982;&#x679C;&#x8BF7;&#x6C42;&#x7684;&#x64CD;&#x4F5C;&#x4E0D;&#x80FD;&#x5F97;&#x5230;&#x7ACB;&#x5373;&#x6267;&#x884C;&#x7684;&#x8BDD;&#xFF0C;&#x6BCF;&#x4E2A;&#x65B9;&#x6CD5;&#x7684;&#x8868;&#x73B0;&#x4E5F;&#x4E0D;&#x540C;&#x3002;&#x8FD9;&#x4E9B;&#x65B9;&#x6CD5;&#x5982;&#x4E0B;&#xFF1A;</p>
<table>
<thead>
<tr>
<th>Throws exception</th>
<th>Special value</th>
<th>Blocks</th>
<th>Times out</th>
</tr>
</thead>
<tbody>
<tr>
<td>add(e)</td>
<td>offer(e)</td>
<td>put(e)</td>
<td>offer(Object, long, TimeUnit)</td>
</tr>
<tr>
<td>remove()</td>
<td>poll()</td>
<td>take()</td>
<td>poll(long, TimeUnit)</td>
</tr>
<tr>
<td>element()</td>
<td>peek()</td>
<td></td>
</tr>
</tbody>
</table>
<p>- Throws exception &#x629B;&#x5F02;&#x5E38;&#xFF1A;&#x5982;&#x679C;&#x8BD5;&#x56FE;&#x7684;&#x64CD;&#x4F5C;&#x65E0;&#x6CD5;&#x7ACB;&#x5373;&#x6267;&#x884C;&#xFF0C;&#x629B;&#x4E00;&#x4E2A;&#x5F02;&#x5E38;&#x3002;
- Special value &#x7279;&#x5B9A;&#x503C;&#xFF1A;&#x5982;&#x679C;&#x8BD5;&#x56FE;&#x7684;&#x64CD;&#x4F5C;&#x65E0;&#x6CD5;&#x7ACB;&#x5373;&#x6267;&#x884C;&#xFF0C;&#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x7279;&#x5B9A;&#x7684;&#x503C;(&#x5E38;&#x5E38;&#x662F; true / false)
- Blocks &#x963B;&#x585E;&#xFF1A;&#x5982;&#x679C;&#x8BD5;&#x56FE;&#x7684;&#x64CD;&#x4F5C;&#x65E0;&#x6CD5;&#x7ACB;&#x5373;&#x6267;&#x884C;&#xFF0C;&#x8BE5;&#x65B9;&#x6CD5;&#x8C03;&#x7528;&#x5C06;&#x4F1A;&#x53D1;&#x751F;&#x963B;&#x585E;&#xFF0C;&#x76F4;&#x5230;&#x80FD;&#x591F;&#x6267;&#x884C;&#x3002;
- Times out &#x8D85;&#x65F6;&#xFF1A;&#x5982;&#x679C;&#x8BD5;&#x56FE;&#x7684;&#x64CD;&#x4F5C;&#x65E0;&#x6CD5;&#x7ACB;&#x5373;&#x6267;&#x884C;&#xFF0C;&#x8BE5;&#x65B9;&#x6CD5;&#x8C03;&#x7528;&#x5C06;&#x4F1A;&#x53D1;&#x751F;&#x963B;&#x585E;&#xFF0C;&#x76F4;&#x5230;&#x80FD;&#x591F;&#x6267;&#x884C;&#xFF0C;&#x4F46;&#x7B49;&#x5F85;&#x65F6;&#x95F4;&#x4E0D;&#x4F1A;&#x8D85;&#x8FC7;&#x7ED9;&#x5B9A;&#x503C;&#x3002;&#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x7279;&#x5B9A;&#x503C;&#x4EE5;&#x544A;&#x77E5;&#x8BE5;&#x64CD;&#x4F5C;&#x662F;&#x5426;&#x6210;&#x529F;(&#x5178;&#x578B;&#x7684;&#x662F;true / false)&#x3002;</p>
<p>BlockingQueue &#x7684;&#x5B9E;&#x73B0;&#x7C7B;
- <strong>ArrayBlockingQueue</strong>&#xFF1A;ArrayBlockingQueue &#x662F;&#x4E00;&#x4E2A;&#x6709;&#x754C;&#x7684;&#x963B;&#x585E;&#x961F;&#x5217;&#xFF0C;&#x5176;&#x5185;&#x90E8;&#x5B9E;&#x73B0;&#x662F;&#x5C06;&#x5BF9;&#x8C61;&#x653E;&#x5230;&#x4E00;&#x4E2A;&#x6570;&#x7EC4;&#x91CC;&#x3002;&#x6709;&#x754C;&#x4E5F;&#x5C31;&#x610F;&#x5473;&#x7740;&#xFF0C;&#x5B83;&#x4E0D;&#x80FD;&#x591F;&#x5B58;&#x50A8;&#x65E0;&#x9650;&#x591A;&#x6570;&#x91CF;&#x7684;&#x5143;&#x7D20;&#x3002;&#x5B83;&#x6709;&#x4E00;&#x4E2A;&#x540C;&#x4E00;&#x65F6;&#x95F4;&#x80FD;&#x591F;&#x5B58;&#x50A8;&#x5143;&#x7D20;&#x6570;&#x91CF;&#x7684;&#x4E0A;&#x9650;&#x3002;&#x4F60;&#x53EF;&#x4EE5;&#x5728;&#x5BF9;&#x5176;&#x521D;&#x59CB;&#x5316;&#x7684;&#x65F6;&#x5019;&#x8BBE;&#x5B9A;&#x8FD9;&#x4E2A;&#x4E0A;&#x9650;&#xFF0C;&#x4F46;&#x4E4B;&#x540E;&#x5C31;&#x65E0;&#x6CD5;&#x5BF9;&#x8FD9;&#x4E2A;&#x4E0A;&#x9650;&#x8FDB;&#x884C;&#x4FEE;&#x6539;&#x4E86;(&#x8BD1;&#x8005;&#x6CE8;&#xFF1A;&#x56E0;&#x4E3A;&#x5B83;&#x662F;&#x57FA;&#x4E8E;&#x6570;&#x7EC4;&#x5B9E;&#x73B0;&#x7684;&#xFF0C;&#x4E5F;&#x5C31;&#x5177;&#x6709;&#x6570;&#x7EC4;&#x7684;&#x7279;&#x6027;&#xFF1A;&#x4E00;&#x65E6;&#x521D;&#x59CB;&#x5316;&#xFF0C;&#x5927;&#x5C0F;&#x5C31;&#x65E0;&#x6CD5;&#x4FEE;&#x6539;)&#x3002;
- <strong>DelayQueue</strong>&#xFF1A;DelayQueue &#x5BF9;&#x5143;&#x7D20;&#x8FDB;&#x884C;&#x6301;&#x6709;&#x76F4;&#x5230;&#x4E00;&#x4E2A;&#x7279;&#x5B9A;&#x7684;&#x5EF6;&#x8FDF;&#x5230;&#x671F;&#x3002;&#x6CE8;&#x5165;&#x5176;&#x4E2D;&#x7684;&#x5143;&#x7D20;&#x5FC5;&#x987B;&#x5B9E;&#x73B0; java.util.concurrent.Delayed &#x63A5;&#x53E3;&#x3002;
- <strong>LinkedBlockingQueue</strong>&#xFF1A;LinkedBlockingQueue &#x5185;&#x90E8;&#x4EE5;&#x4E00;&#x4E2A;&#x94FE;&#x5F0F;&#x7ED3;&#x6784;(&#x94FE;&#x63A5;&#x8282;&#x70B9;)&#x5BF9;&#x5176;&#x5143;&#x7D20;&#x8FDB;&#x884C;&#x5B58;&#x50A8;&#x3002;&#x5982;&#x679C;&#x9700;&#x8981;&#x7684;&#x8BDD;&#xFF0C;&#x8FD9;&#x4E00;&#x94FE;&#x5F0F;&#x7ED3;&#x6784;&#x53EF;&#x4EE5;&#x9009;&#x62E9;&#x4E00;&#x4E2A;&#x4E0A;&#x9650;&#x3002;&#x5982;&#x679C;&#x6CA1;&#x6709;&#x5B9A;&#x4E49;&#x4E0A;&#x9650;&#xFF0C;&#x5C06;&#x4F7F;&#x7528; Integer.MAX_VALUE &#x4F5C;&#x4E3A;&#x4E0A;&#x9650;&#x3002;
- <strong>PriorityBlockingQueue</strong>&#xFF1A;PriorityBlockingQueue &#x662F;&#x4E00;&#x4E2A;&#x65E0;&#x754C;&#x7684;&#x5E76;&#x53D1;&#x961F;&#x5217;&#x3002;&#x5B83;&#x4F7F;&#x7528;&#x4E86;&#x548C;&#x7C7B; java.util.PriorityQueue &#x4E00;&#x6837;&#x7684;&#x6392;&#x5E8F;&#x89C4;&#x5219;&#x3002;&#x4F60;&#x65E0;&#x6CD5;&#x5411;&#x8FD9;&#x4E2A;&#x961F;&#x5217;&#x4E2D;&#x63D2;&#x5165; null &#x503C;&#x3002;&#x6240;&#x6709;&#x63D2;&#x5165;&#x5230; PriorityBlockingQueue &#x7684;&#x5143;&#x7D20;&#x5FC5;&#x987B;&#x5B9E;&#x73B0; java.lang.Comparable &#x63A5;&#x53E3;&#x3002;&#x56E0;&#x6B64;&#x8BE5;&#x961F;&#x5217;&#x4E2D;&#x5143;&#x7D20;&#x7684;&#x6392;&#x5E8F;&#x5C31;&#x53D6;&#x51B3;&#x4E8E;&#x4F60;&#x81EA;&#x5DF1;&#x7684; Comparable &#x5B9E;&#x73B0;&#x3002;
- <strong>SynchronousQueue</strong>&#xFF1A;SynchronousQueue &#x662F;&#x4E00;&#x4E2A;&#x7279;&#x6B8A;&#x7684;&#x961F;&#x5217;&#xFF0C;&#x5B83;&#x7684;&#x5185;&#x90E8;&#x540C;&#x65F6;&#x53EA;&#x80FD;&#x591F;&#x5BB9;&#x7EB3;&#x5355;&#x4E2A;&#x5143;&#x7D20;&#x3002;&#x5982;&#x679C;&#x8BE5;&#x961F;&#x5217;&#x5DF2;&#x6709;&#x4E00;&#x5143;&#x7D20;&#x7684;&#x8BDD;&#xFF0C;&#x8BD5;&#x56FE;&#x5411;&#x961F;&#x5217;&#x4E2D;&#x63D2;&#x5165;&#x4E00;&#x4E2A;&#x65B0;&#x5143;&#x7D20;&#x7684;&#x7EBF;&#x7A0B;&#x5C06;&#x4F1A;&#x963B;&#x585E;&#xFF0C;&#x76F4;&#x5230;&#x53E6;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x5C06;&#x8BE5;&#x5143;&#x7D20;&#x4ECE;&#x961F;&#x5217;&#x4E2D;&#x62BD;&#x8D70;&#x3002;&#x540C;&#x6837;&#xFF0C;&#x5982;&#x679C;&#x8BE5;&#x961F;&#x5217;&#x4E3A;&#x7A7A;&#xFF0C;&#x8BD5;&#x56FE;&#x5411;&#x961F;&#x5217;&#x4E2D;&#x62BD;&#x53D6;&#x4E00;&#x4E2A;&#x5143;&#x7D20;&#x7684;&#x7EBF;&#x7A0B;&#x5C06;&#x4F1A;&#x963B;&#x585E;&#xFF0C;&#x76F4;&#x5230;&#x53E6;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x5411;&#x961F;&#x5217;&#x4E2D;&#x63D2;&#x5165;&#x4E86;&#x4E00;&#x6761;&#x65B0;&#x7684;&#x5143;&#x7D20;&#x3002;&#x636E;&#x6B64;&#xFF0C;&#x628A;&#x8FD9;&#x4E2A;&#x7C7B;&#x79F0;&#x4F5C;&#x4E00;&#x4E2A;&#x961F;&#x5217;&#x663E;&#x7136;&#x662F;&#x5938;&#x5927;&#x5176;&#x8BCD;&#x4E86;&#x3002;&#x5B83;&#x66F4;&#x591A;&#x50CF;&#x662F;&#x4E00;&#x4E2A;&#x6C47;&#x5408;&#x70B9;&#x3002;</p>
<p>BlocingQueue&#x7684;&#x5B9E;&#x73B0;&#x5927;&#x591A;&#x662F;&#x901A;&#x8FC7; lock&#x9501;&#x7684;&#x591A;&#x6761;&#x4EF6;&#xFF08;condition&#xFF09;&#x963B;&#x585E;&#x63A7;&#x5236;&#xFF0C;&#x4E0B;&#x9762;&#x6211;&#x4EEC;&#x81EA;&#x5DF1;&#x5199;&#x4E00;&#x4E2A;&#x7B80;&#x5355;&#x7248;&#xFF1A;</p>
<pre><code>import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * &#x6A21;&#x4EFF;ArrayBlockingQueue&#x5B9E;&#x73B0;&#x963B;&#x585E;&#x961F;&#x5217;
 * @author xuexiaolei
 * @version 2017&#x5E74;11&#x6708;01&#x65E5;
 */
public class MyBlocingQueue2&lt;E&gt; {
    private final List list;
    private final int limit;//&#x6709;&#x5927;&#x5C0F;&#x9650;&#x5236;&#x7684;
    private final Lock lock = new ReentrantLock();
    private final Condition notFull = lock.newCondition();
    private final Condition notEmpty = lock.newCondition();

    public MyBlocingQueue2(int limit) {
        this.limit = limit;
        this.list = new LinkedList&lt;E&gt;();
    }

    public void put(E e) throws InterruptedException {
        lock.lock();
        try {
            while (list.size() == limit){
                notFull.await();
            }
            list.add(e);
            notEmpty.signalAll();
        }finally {
            lock.unlock();
        }
    }
    public E take() throws InterruptedException {
        lock.lock();
        try {
            while (list.size() == 0){
                notEmpty.await();
            }
            E remove = (E) list.remove(0);
            notFull.signalAll();
            return remove;
        }finally {
            lock.unlock();
        }
    }
}
</code></pre><h2 id="&#x7528;java&#x5199;&#x4EE3;&#x7801;&#x6765;&#x89E3;&#x51B3;&#x751F;&#x4EA7;&#x8005;&#x2014;&#x2014;&#x6D88;&#x8D39;&#x8005;&#x95EE;&#x9898;&#x3002;"><a name="&#x7528;java&#x5199;&#x4EE3;&#x7801;&#x6765;&#x89E3;&#x51B3;&#x751F;&#x4EA7;&#x8005;&#x2014;&#x2014;&#x6D88;&#x8D39;&#x8005;&#x95EE;&#x9898;&#x3002;" class="anchor-navigation-ex-anchor" href="#&#x7528;java&#x5199;&#x4EE3;&#x7801;&#x6765;&#x89E3;&#x51B3;&#x751F;&#x4EA7;&#x8005;&#x2014;&#x2014;&#x6D88;&#x8D39;&#x8005;&#x95EE;&#x9898;&#x3002;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x7528;java&#x5199;&#x4EE3;&#x7801;&#x6765;&#x89E3;&#x51B3;&#x751F;&#x4EA7;&#x8005;&#x2014;&#x2014;&#x6D88;&#x8D39;&#x8005;&#x95EE;&#x9898;&#x3002;" class="plugin-anchor" href="#&#x7528;java&#x5199;&#x4EE3;&#x7801;&#x6765;&#x89E3;&#x51B3;&#x751F;&#x4EA7;&#x8005;&#x2014;&#x2014;&#x6D88;&#x8D39;&#x8005;&#x95EE;&#x9898;&#x3002;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x7528;Java&#x5199;&#x4EE3;&#x7801;&#x6765;&#x89E3;&#x51B3;&#x751F;&#x4EA7;&#x8005;&#x2014;&#x2014;&#x6D88;&#x8D39;&#x8005;&#x95EE;&#x9898;&#x3002;</h2>
<p>&#x4E0E;&#x4E0A;&#x9762;&#x7684;&#x95EE;&#x9898;&#x5F88;&#x7C7B;&#x4F3C;&#xFF0C;&#x4F46;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#x66F4;&#x7ECF;&#x5178;&#xFF0C;&#x6709;&#x4E9B;&#x65F6;&#x5019;&#x9762;&#x8BD5;&#x90FD;&#x4F1A;&#x95EE;&#x4E0B;&#x9762;&#x7684;&#x95EE;&#x9898;&#x3002;&#x5728;Java&#x4E2D;&#x600E;&#x4E48;&#x89E3;&#x51B3;&#x751F;&#x4EA7;&#x8005;&#x2014;&#x2014;&#x6D88;&#x8D39;&#x8005;&#x95EE;&#x9898;&#xFF0C;&#x5F53;&#x7136;&#x6709;&#x5F88;&#x591A;&#x89E3;&#x51B3;&#x65B9;&#x6CD5;&#xFF0C;&#x6211;&#x5DF2;&#x7ECF;&#x5206;&#x4EAB;&#x4E86;&#x4E00;&#x79CD;&#x7528;&#x963B;&#x585E;&#x961F;&#x5217;&#x5B9E;&#x73B0;&#x7684;&#x65B9;&#x6CD5;&#x3002;&#x6709;&#x4E9B;&#x65F6;&#x5019;&#x4ED6;&#x4EEC;&#x751A;&#x81F3;&#x4F1A;&#x95EE;&#x600E;&#x4E48;&#x5B9E;&#x73B0;&#x54F2;&#x5B66;&#x5BB6;&#x8FDB;&#x9910;&#x95EE;&#x9898;&#x3002;</p>
<p>&#x751F;&#x4EA7;&#x8005;&#x3001;&#x6D88;&#x8D39;&#x8005;&#x6709;&#x5F88;&#x591A;&#x7684;&#x5B9E;&#x73B0;&#x65B9;&#x6CD5;&#xFF1A;
- &#x7528;wait() / notify()&#x65B9;&#x6CD5;
- &#x7528;Lock&#x7684;&#x591A;Condition&#x65B9;&#x6CD5;
- BlockingQueue&#x963B;&#x585E;&#x961F;&#x5217;&#x65B9;&#x6CD5;</p>
<p>&#x53EF;&#x4EE5;&#x53D1;&#x73B0;&#x5728;&#x4E0A;&#x9762;&#x5B9E;&#x73B0;&#x963B;&#x585E;&#x961F;&#x5217;&#x9898;&#x4E2D;&#xFF0C;BlockingQueue&#x7684;&#x5B9E;&#x73B0;&#x57FA;&#x672C;&#x90FD;&#x7528;&#x5230;&#x4E86;&#x7C7B;&#x4F3C;&#x7684;&#x5B9E;&#x73B0;&#xFF0C;&#x5C06;BlockingQueue&#x7684;&#x5B9E;&#x73B0;&#x65B9;&#x5F0F;&#x7A0D;&#x5FAE;&#x5305;&#x88C5;&#x4E00;&#x4E0B;&#x5C31;&#x6210;&#x4E86;&#x4E00;&#x4E2A;&#x751F;&#x4EA7;&#x8005;-&#x6D88;&#x8D39;&#x8005;&#x6A21;&#x5F0F;&#x4E86;&#x3002;</p>
<pre><code>import java.util.Random;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

/**
 * &#x7528;&#x963B;&#x585E;&#x961F;&#x5217;&#x5FEB;&#x901F;&#x5B9E;&#x73B0;&#x751F;&#x4EA7;&#x8005;-&#x6D88;&#x8D39;&#x8005;
 * @author xuexiaolei
 * @version 2017&#x5E74;11&#x6708;01&#x65E5;
 */
public class ProduceAndConsumer {
    public static void main(String[] args) {
        final BlockingQueue&lt;Integer&gt; list = new ArrayBlockingQueue&lt;Integer&gt;(10);
        Procude procude = new Procude(list);
        Consumer consumer = new Consumer(list);
        procude.start();
        consumer.start();
    }

    static class Procude extends Thread{
        private final BlockingQueue&lt;Integer&gt; list;
        Procude(BlockingQueue&lt;Integer&gt; list) {
            this.list = list;
        }
        @Override public void run() {
            while(true){
                try {
                    Integer take = list.take();
                    System.out.println(&quot;&#x6D88;&#x8D39;&#x6570;&#x636E;&#xFF1A;&quot; + take);
//                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    static class Consumer extends Thread{
        private final BlockingQueue&lt;Integer&gt; list;
        Consumer(BlockingQueue&lt;Integer&gt; list) {
            this.list = list;
        }
        @Override public void run() {
            while (true){
                try {
                    int i = new Random().nextInt(100);
                    list.put(i);
                    System.out.println(&quot;&#x751F;&#x4EA7;&#x6570;&#x636E;&#xFF1A;&quot; + i);
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
</code></pre><p>&#x6B64;&#x5904;&#x4E0D;&#x518D;&#x8BE6;&#x7EC6;&#x5730;&#x5199;&#x53E6;&#x5916;&#x51E0;&#x79CD;&#x5B9E;&#x73B0;&#x65B9;&#x5F0F;&#x4E86;&#xFF1A;wait() / notify()&#x65B9;&#x6CD5;&#x3001;Lock&#x7684;&#x591A;Condition&#x65B9;&#x6CD5;&#x3001;&#x4FE1;&#x53F7;&#x91CF;&#x7B49;&#xFF0C;&#x751A;&#x81F3;&#x53EF;&#x4EE5;&#x8003;&#x8651;&#x7528;CyclicBarrier&#x3001;CountDownLatch&#x4E5F;&#x53EF;&#x4EE5;&#x5B9E;&#x73B0;&#x751F;&#x4EA7;&#x8005;-&#x6D88;&#x8D39;&#x8005;&#x7684;&#xFF0C;&#x96BE;&#x6613;&#x7A0B;&#x5EA6;&#x3001;&#x6548;&#x7387;&#x4E0D;&#x4E00;&#x6837;&#x7F62;&#x4E86;&#x3002;</p>
<h2 id="&#x7528;java&#x5199;&#x4E00;&#x4E2A;&#x4F1A;&#x5BFC;&#x81F4;&#x6B7B;&#x9501;&#x7684;&#x7A0B;&#x5E8F;&#xFF0C;&#x4F60;&#x5C06;&#x600E;&#x4E48;&#x89E3;&#x51B3;&#xFF1F;"><a name="&#x7528;java&#x5199;&#x4E00;&#x4E2A;&#x4F1A;&#x5BFC;&#x81F4;&#x6B7B;&#x9501;&#x7684;&#x7A0B;&#x5E8F;&#xFF0C;&#x4F60;&#x5C06;&#x600E;&#x4E48;&#x89E3;&#x51B3;&#xFF1F;" class="anchor-navigation-ex-anchor" href="#&#x7528;java&#x5199;&#x4E00;&#x4E2A;&#x4F1A;&#x5BFC;&#x81F4;&#x6B7B;&#x9501;&#x7684;&#x7A0B;&#x5E8F;&#xFF0C;&#x4F60;&#x5C06;&#x600E;&#x4E48;&#x89E3;&#x51B3;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x7528;java&#x5199;&#x4E00;&#x4E2A;&#x4F1A;&#x5BFC;&#x81F4;&#x6B7B;&#x9501;&#x7684;&#x7A0B;&#x5E8F;&#xFF0C;&#x4F60;&#x5C06;&#x600E;&#x4E48;&#x89E3;&#x51B3;&#xFF1F;" class="plugin-anchor" href="#&#x7528;java&#x5199;&#x4E00;&#x4E2A;&#x4F1A;&#x5BFC;&#x81F4;&#x6B7B;&#x9501;&#x7684;&#x7A0B;&#x5E8F;&#xFF0C;&#x4F60;&#x5C06;&#x600E;&#x4E48;&#x89E3;&#x51B3;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x7528;Java&#x5199;&#x4E00;&#x4E2A;&#x4F1A;&#x5BFC;&#x81F4;&#x6B7B;&#x9501;&#x7684;&#x7A0B;&#x5E8F;&#xFF0C;&#x4F60;&#x5C06;&#x600E;&#x4E48;&#x89E3;&#x51B3;&#xFF1F;</h2>
<p>&#x8FD9;&#x662F;&#x6211;&#x6700;&#x559C;&#x6B22;&#x7684;Java&#x7EBF;&#x7A0B;&#x9762;&#x8BD5;&#x95EE;&#x9898;&#xFF0C;&#x56E0;&#x4E3A;&#x5373;&#x4F7F;&#x6B7B;&#x9501;&#x95EE;&#x9898;&#x5728;&#x5199;&#x591A;&#x7EBF;&#x7A0B;&#x5E76;&#x53D1;&#x7A0B;&#x5E8F;&#x65F6;&#x975E;&#x5E38;&#x666E;&#x904D;&#xFF0C;&#x4F46;&#x662F;&#x5F88;&#x591A;&#x4FAF;&#x9009;&#x8005;&#x5E76;&#x4E0D;&#x80FD;&#x5199;deadlock free code&#xFF08;&#x65E0;&#x6B7B;&#x9501;&#x4EE3;&#x7801;&#xFF1F;&#xFF09;&#xFF0C;&#x4ED6;&#x4EEC;&#x5F88;&#x6323;&#x624E;&#x3002;&#x53EA;&#x8981;&#x544A;&#x8BC9;&#x4ED6;&#x4EEC;&#xFF0C;&#x4F60;&#x6709;N&#x4E2A;&#x8D44;&#x6E90;&#x548C;N&#x4E2A;&#x7EBF;&#x7A0B;&#xFF0C;&#x5E76;&#x4E14;&#x4F60;&#x9700;&#x8981;&#x6240;&#x6709;&#x7684;&#x8D44;&#x6E90;&#x6765;&#x5B8C;&#x6210;&#x4E00;&#x4E2A;&#x64CD;&#x4F5C;&#x3002;&#x4E3A;&#x4E86;&#x7B80;&#x5355;&#x8FD9;&#x91CC;&#x7684;n&#x53EF;&#x4EE5;&#x66FF;&#x6362;&#x4E3A;2&#xFF0C;&#x8D8A;&#x5927;&#x7684;&#x6570;&#x636E;&#x4F1A;&#x4F7F;&#x95EE;&#x9898;&#x770B;&#x8D77;&#x6765;&#x66F4;&#x590D;&#x6742;&#x3002;&#x901A;&#x8FC7;&#x907F;&#x514D;Java&#x4E2D;&#x7684;&#x6B7B;&#x9501;&#x6765;&#x5F97;&#x5230;&#x5173;&#x4E8E;&#x6B7B;&#x9501;&#x7684;&#x66F4;&#x591A;&#x4FE1;&#x606F;&#x3002;</p>
<pre><code>/**
 * &#x7B80;&#x5355;&#x6B7B;&#x9501;&#x7A0B;&#x5E8F;
 *      lockA&#x3001;lockB&#x5206;&#x522B;&#x662F;&#x4E24;&#x4E2A;&#x8D44;&#x6E90;&#xFF0C;&#x7EBF;&#x7A0B;A&#x3001;B&#x5FC5;&#x987B;&#x540C;&#x662F;&#x62FF;&#x5230;&#x624D;&#x80FD;&#x5DE5;&#x4F5C;
 *      &#x4F46;A&#x7EBF;&#x7A0B;&#x5148;&#x62FF;lockA&#x3001;&#x518D;&#x62FF;lockB
 *      &#x7EBF;&#x7A0B;&#x5148;&#x62FF;lockB&#x3001;&#x518D;&#x62FF;lockA
 * @author xuexiaolei
 * @version 2017&#x5E74;11&#x6708;01&#x65E5;
 */
public class SimpleDeadLock {
    public static void main(String[] args) {
        Object lockA = new Object();
        Object lockB = new Object();
        A a = new A(lockA, lockB);
        B b = new B(lockA, lockB);
        a.start();
        b.start();
    }

    static class A extends Thread{
        private final Object lockA;
        private final Object lockB;
        A(Object lockA, Object lockB) {
            this.lockA = lockA;
            this.lockB = lockB;
        }

        @Override public void run() {
            synchronized (lockA){
                try {
                    Thread.sleep(1000);
                    synchronized (lockB){
                        System.out.println(&quot;Hello A&quot;);
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    static class B extends Thread{
        private final Object lockA;
        private final Object lockB;
        B(Object lockA, Object lockB) {
            this.lockA = lockA;
            this.lockB = lockB;
        }

        @Override public void run() {
            synchronized (lockB){
                try {
                    Thread.sleep(1000);
                    synchronized (lockA){
                        System.out.println(&quot;Hello B&quot;);
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
</code></pre><p>&#x4EA7;&#x751F;&#x6B7B;&#x9501;&#x7684;&#x56DB;&#x4E2A;&#x5FC5;&#x8981;&#x6761;&#x4EF6;&#xFF1A;
- &#x4E92;&#x65A5;&#x6761;&#x4EF6;&#xFF1A;&#x4E00;&#x4E2A;&#x8D44;&#x6E90;&#x6BCF;&#x6B21;&#x53EA;&#x80FD;&#x88AB;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#x4F7F;&#x7528;&#x3002;
- &#x8BF7;&#x6C42;&#x4E0E;&#x4FDD;&#x6301;&#x6761;&#x4EF6;&#xFF1A;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#x56E0;&#x8BF7;&#x6C42;&#x8D44;&#x6E90;&#x800C;&#x963B;&#x585E;&#x65F6;&#xFF0C;&#x5BF9;&#x5DF2;&#x83B7;&#x5F97;&#x7684;&#x8D44;&#x6E90;&#x4FDD;&#x6301;&#x4E0D;&#x653E;&#x3002;
- &#x4E0D;&#x5265;&#x593A;&#x6761;&#x4EF6;:&#x8FDB;&#x7A0B;&#x5DF2;&#x83B7;&#x5F97;&#x7684;&#x8D44;&#x6E90;&#xFF0C;&#x5728;&#x672B;&#x4F7F;&#x7528;&#x5B8C;&#x4E4B;&#x524D;&#xFF0C;&#x4E0D;&#x80FD;&#x5F3A;&#x884C;&#x5265;&#x593A;&#x3002;
- &#x5FAA;&#x73AF;&#x7B49;&#x5F85;&#x6761;&#x4EF6;:&#x82E5;&#x5E72;&#x8FDB;&#x7A0B;&#x4E4B;&#x95F4;&#x5F62;&#x6210;&#x4E00;&#x79CD;&#x5934;&#x5C3E;&#x76F8;&#x63A5;&#x7684;&#x5FAA;&#x73AF;&#x7B49;&#x5F85;&#x8D44;&#x6E90;&#x5173;&#x7CFB;&#x3002;</p>
<p>&#x5982;&#x4F55;&#x907F;&#x514D;&#x6B7B;&#x9501;&#xFF1F;
- &#x4ECE;&#x6B7B;&#x9501;&#x7684;&#x56DB;&#x4E2A;&#x5FC5;&#x8981;&#x6761;&#x4EF6;&#x6765;&#x770B;&#xFF0C;&#x7834;&#x574F;&#x5176;&#x4E2D;&#x7684;&#x4EFB;&#x610F;&#x4E00;&#x4E2A;&#x6761;&#x4EF6;&#x5C31;&#x53EF;&#x4EE5;&#x907F;&#x514D;&#x6B7B;&#x9501;&#x3002;&#x4F46;&#x4E92;&#x65A5;&#x6761;&#x4EF6;&#x662F;&#x7531;&#x8D44;&#x6E90;&#x672C;&#x8EAB;&#x51B3;&#x5B9A;&#x7684;&#xFF0C;&#x4E0D;&#x5265;&#x593A;&#x6761;&#x4EF6;&#x4E00;&#x822C;&#x65E0;&#x6CD5;&#x7834;&#x574F;&#xFF0C;&#x8981;&#x5B9E;&#x73B0;&#x7684;&#x8BDD;&#x5F97;&#x81EA;&#x5DF1;&#x5199;&#x66F4;&#x591A;&#x7684;&#x903B;&#x8F91;&#x3002;
- &#x907F;&#x514D;&#x65E0;&#x9650;&#x671F;&#x7684;&#x7B49;&#x5F85;&#xFF1A;&#x7528;Lock.tryLock(),wait/notify&#x7B49;&#x65B9;&#x6CD5;&#x5199;&#x51FA;&#x8BF7;&#x6C42;&#x4E00;&#x5B9A;&#x65F6;&#x95F4;&#x540E;&#xFF0C;&#x653E;&#x5F03;&#x5DF2;&#x7ECF;&#x62E5;&#x6709;&#x7684;&#x9501;&#x7684;&#x7A0B;&#x5E8F;&#x3002;
- &#x6CE8;&#x610F;&#x9501;&#x7684;&#x987A;&#x5E8F;&#xFF1A;&#x4EE5;&#x56FA;&#x5B9A;&#x7684;&#x987A;&#x5E8F;&#x83B7;&#x53D6;&#x9501;&#xFF0C;&#x53EF;&#x4EE5;&#x907F;&#x514D;&#x6B7B;&#x9501;&#x3002;
- &#x5F00;&#x653E;&#x8C03;&#x7528;&#xFF1A;&#x5373;&#x53EA;&#x5BF9;&#x6709;&#x8BF7;&#x6C42;&#x7684;&#x8FDB;&#x884C;&#x5C01;&#x9501;&#x3002;&#x4F60;&#x5E94;&#x5F53;&#x53EA;&#x60F3;&#x4F60;&#x8981;&#x8FD0;&#x884C;&#x7684;&#x8D44;&#x6E90;&#x83B7;&#x53D6;&#x5C01;&#x9501;&#xFF0C;&#x6BD4;&#x5982;&#x5728;&#x4E0A;&#x8FF0;&#x7A0B;&#x5E8F;&#x4E2D;&#x6211;&#x5728;&#x5C01;&#x9501;&#x7684;&#x5B8C;&#x5168;&#x7684;&#x5BF9;&#x8C61;&#x8D44;&#x6E90;&#x3002;&#x4F46;&#x662F;&#x5982;&#x679C;&#x6211;&#x4EEC;&#x53EA;&#x5BF9;&#x5B83;&#x6240;&#x5C5E;&#x9886;&#x57DF;&#x4E2D;&#x7684;&#x4E00;&#x4E2A;&#x611F;&#x5174;&#x8DA3;&#xFF0C;&#x90A3;&#x6211;&#x4EEC;&#x5E94;&#x5F53;&#x5C01;&#x9501;&#x4F4F;&#x90A3;&#x4E2A;&#x7279;&#x6B8A;&#x7684;&#x9886;&#x57DF;&#x800C;&#x5E76;&#x975E;&#x5B8C;&#x5168;&#x7684;&#x5BF9;&#x8C61;&#x3002;
- &#x6700;&#x540E;&#xFF0C;&#x5982;&#x679C;&#x80FD;&#x907F;&#x514D;&#x4F7F;&#x7528;&#x591A;&#x4E2A;&#x9501;&#xFF0C;&#x751A;&#x81F3;&#x5199;&#x51FA;&#x65E0;&#x9501;&#x7684;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x7A0B;&#x5E8F;&#x662F;&#x518D;&#x597D;&#x4E0D;&#x8FC7;&#x4E86;&#x3002;</p>
<h2 id="&#x4EC0;&#x4E48;&#x662F;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#xFF0C;java&#x4E2D;&#x7684;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;"><a name="&#x4EC0;&#x4E48;&#x662F;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#xFF0C;java&#x4E2D;&#x7684;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;" class="anchor-navigation-ex-anchor" href="#&#x4EC0;&#x4E48;&#x662F;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#xFF0C;java&#x4E2D;&#x7684;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x4EC0;&#x4E48;&#x662F;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#xFF0C;java&#x4E2D;&#x7684;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;" class="plugin-anchor" href="#&#x4EC0;&#x4E48;&#x662F;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#xFF0C;java&#x4E2D;&#x7684;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x4EC0;&#x4E48;&#x662F;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#xFF0C;Java&#x4E2D;&#x7684;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;</h2>
<p>&#x975E;&#x5E38;&#x7B80;&#x5355;&#x7684;java&#x7EBF;&#x7A0B;&#x9762;&#x8BD5;&#x95EE;&#x9898;&#xFF0C;&#x63A5;&#x4E0B;&#x6765;&#x7684;&#x95EE;&#x9898;&#x662F;&#x4F60;&#x662F;&#x5426;&#x9700;&#x8981;&#x540C;&#x6B65;&#x4E00;&#x4E2A;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#x3002;</p>
<p>&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#x662F;&#x4E0D;&#x53EF;&#x5206;&#x5272;&#x7684;&#x64CD;&#x4F5C;&#xFF0C;&#x4E00;&#x4E2A;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#x4E2D;&#x95F4;&#x662F;&#x4E0D;&#x4F1A;&#x88AB;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x6253;&#x65AD;&#x7684;&#xFF0C;&#x6240;&#x4EE5;&#x4E0D;&#x9700;&#x8981;&#x540C;&#x6B65;&#x4E00;&#x4E2A;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#x3002;
&#x591A;&#x4E2A;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#x5408;&#x5E76;&#x8D77;&#x6765;&#x540E;&#x5C31;&#x4E0D;&#x662F;&#x4E00;&#x4E2A;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#x4E86;&#xFF0C;&#x5C31;&#x9700;&#x8981;&#x540C;&#x6B65;&#x4E86;&#x3002;
i++&#x4E0D;&#x662F;&#x4E00;&#x4E2A;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#xFF0C;&#x5B83;&#x5305;&#x542B; &#x8BFB;&#x53D6;-&#x4FEE;&#x6539;-&#x5199;&#x5165; &#x64CD;&#x4F5C;&#xFF0C;&#x5728;&#x591A;&#x7EBF;&#x7A0B;&#x72B6;&#x6001;&#x4E0B;&#x662F;&#x4E0D;&#x5B89;&#x5168;&#x7684;&#x3002;
&#x53E6;&#x5916;&#xFF0C;java&#x5185;&#x5B58;&#x6A21;&#x578B;&#x5141;&#x8BB8;&#x5C06;64&#x4F4D;&#x7684;&#x8BFB;&#x64CD;&#x4F5C;&#x6216;&#x5199;&#x64CD;&#x4F5C;&#x5206;&#x89E3;&#x4E3A;2&#x4E2A;32&#x4F4D;&#x7684;&#x64CD;&#x4F5C;&#xFF0C;&#x6240;&#x4EE5;&#x5BF9;long&#x548C;double&#x7C7B;&#x578B;&#x7684;&#x5355;&#x6B21;&#x8BFB;&#x5199;&#x64CD;&#x4F5C;&#x5E76;&#x4E0D;&#x662F;&#x539F;&#x5B50;&#x7684;&#xFF0C;&#x6CE8;&#x610F;&#x4F7F;&#x7528;volitile&#x4F7F;&#x4ED6;&#x4EEC;&#x6210;&#x4E3A;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#x3002;</p>
<h2 id="java&#x4E2D;&#x7684;volatile&#x5173;&#x952E;&#x662F;&#x4EC0;&#x4E48;&#x4F5C;&#x7528;&#xFF1F;&#x600E;&#x6837;&#x4F7F;&#x7528;&#x5B83;&#xFF1F;&#x5728;java&#x4E2D;&#x5B83;&#x8DDF;synchronized&#x65B9;&#x6CD5;&#x6709;&#x4EC0;&#x4E48;&#x4E0D;&#x540C;&#xFF1F;"><a name="java&#x4E2D;&#x7684;volatile&#x5173;&#x952E;&#x662F;&#x4EC0;&#x4E48;&#x4F5C;&#x7528;&#xFF1F;&#x600E;&#x6837;&#x4F7F;&#x7528;&#x5B83;&#xFF1F;&#x5728;java&#x4E2D;&#x5B83;&#x8DDF;synchronized&#x65B9;&#x6CD5;&#x6709;&#x4EC0;&#x4E48;&#x4E0D;&#x540C;&#xFF1F;" class="anchor-navigation-ex-anchor" href="#java&#x4E2D;&#x7684;volatile&#x5173;&#x952E;&#x662F;&#x4EC0;&#x4E48;&#x4F5C;&#x7528;&#xFF1F;&#x600E;&#x6837;&#x4F7F;&#x7528;&#x5B83;&#xFF1F;&#x5728;java&#x4E2D;&#x5B83;&#x8DDF;synchronized&#x65B9;&#x6CD5;&#x6709;&#x4EC0;&#x4E48;&#x4E0D;&#x540C;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="java&#x4E2D;&#x7684;volatile&#x5173;&#x952E;&#x662F;&#x4EC0;&#x4E48;&#x4F5C;&#x7528;&#xFF1F;&#x600E;&#x6837;&#x4F7F;&#x7528;&#x5B83;&#xFF1F;&#x5728;java&#x4E2D;&#x5B83;&#x8DDF;synchronized&#x65B9;&#x6CD5;&#x6709;&#x4EC0;&#x4E48;&#x4E0D;&#x540C;&#xFF1F;" class="plugin-anchor" href="#java&#x4E2D;&#x7684;volatile&#x5173;&#x952E;&#x662F;&#x4EC0;&#x4E48;&#x4F5C;&#x7528;&#xFF1F;&#x600E;&#x6837;&#x4F7F;&#x7528;&#x5B83;&#xFF1F;&#x5728;java&#x4E2D;&#x5B83;&#x8DDF;synchronized&#x65B9;&#x6CD5;&#x6709;&#x4EC0;&#x4E48;&#x4E0D;&#x540C;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a>Java&#x4E2D;&#x7684;volatile&#x5173;&#x952E;&#x662F;&#x4EC0;&#x4E48;&#x4F5C;&#x7528;&#xFF1F;&#x600E;&#x6837;&#x4F7F;&#x7528;&#x5B83;&#xFF1F;&#x5728;Java&#x4E2D;&#x5B83;&#x8DDF;synchronized&#x65B9;&#x6CD5;&#x6709;&#x4EC0;&#x4E48;&#x4E0D;&#x540C;&#xFF1F;</h2>
<p>&#x81EA;&#x4ECE;Java 5&#x548C;Java&#x5185;&#x5B58;&#x6A21;&#x578B;&#x6539;&#x53D8;&#x4EE5;&#x540E;&#xFF0C;&#x57FA;&#x4E8E;volatile&#x5173;&#x952E;&#x5B57;&#x7684;&#x7EBF;&#x7A0B;&#x95EE;&#x9898;&#x8D8A;&#x6765;&#x8D8A;&#x6D41;&#x884C;&#x3002;&#x5E94;&#x8BE5;&#x51C6;&#x5907;&#x597D;&#x56DE;&#x7B54;&#x5173;&#x4E8E;volatile&#x53D8;&#x91CF;&#x600E;&#x6837;&#x5728;&#x5E76;&#x53D1;&#x73AF;&#x5883;&#x4E2D;&#x786E;&#x4FDD;&#x53EF;&#x89C1;&#x6027;&#x3002;</p>
<p>volatile&#x5173;&#x952E;&#x5B57;&#x7684;&#x4F5C;&#x7528;&#x662F;&#xFF1A;&#x4FDD;&#x8BC1;&#x53D8;&#x91CF;&#x7684;&#x53EF;&#x89C1;&#x6027;&#x3002;
&#x5728;java&#x5185;&#x5B58;&#x7ED3;&#x6784;&#x4E2D;&#xFF0C;&#x6BCF;&#x4E2A;&#x7EBF;&#x7A0B;&#x90FD;&#x662F;&#x6709;&#x81EA;&#x5DF1;&#x72EC;&#x7ACB;&#x7684;&#x5185;&#x5B58;&#x7A7A;&#x95F4;(&#x6B64;&#x5904;&#x6307;&#x7684;&#x7EBF;&#x7A0B;&#x6808;)&#x3002;&#x5F53;&#x9700;&#x8981;&#x5BF9;&#x4E00;&#x4E2A;&#x5171;&#x4EAB;&#x53D8;&#x91CF;&#x64CD;&#x4F5C;&#x65F6;&#xFF0C;&#x7EBF;&#x7A0B;&#x4F1A;&#x5C06;&#x8FD9;&#x4E2A;&#x6570;&#x636E;&#x4ECE;&#x4E3B;&#x5B58;&#x7A7A;&#x95F4;&#x590D;&#x5236;&#x5230;&#x81EA;&#x5DF1;&#x7684;&#x72EC;&#x7ACB;&#x7A7A;&#x95F4;&#x5185;&#x8FDB;&#x884C;&#x64CD;&#x4F5C;&#xFF0C;&#x7136;&#x540E;&#x5728;&#x67D0;&#x4E2A;&#x65F6;&#x523B;&#x5C06;&#x4FEE;&#x6539;&#x540E;&#x7684;&#x503C;&#x5237;&#x65B0;&#x5230;&#x4E3B;&#x5B58;&#x7A7A;&#x95F4;&#x3002;&#x8FD9;&#x4E2A;&#x4E2D;&#x95F4;&#x65F6;&#x95F4;&#x5C31;&#x4F1A;&#x53D1;&#x751F;&#x8BB8;&#x591A;&#x5947;&#x5947;&#x602A;&#x602A;&#x7684;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x95EE;&#x9898;&#x4E86;&#xFF0C;volatile&#x5C31;&#x51FA;&#x6765;&#x4E86;&#xFF0C;&#x5B83;&#x4FDD;&#x8BC1;&#x8BFB;&#x53D6;&#x6570;&#x636E;&#x65F6;&#x53EA;&#x4ECE;&#x4E3B;&#x5B58;&#x7A7A;&#x95F4;&#x8BFB;&#x53D6;&#xFF0C;&#x4FEE;&#x6539;&#x6570;&#x636E;&#x76F4;&#x63A5;&#x4FEE;&#x6539;&#x5230;&#x4E3B;&#x5B58;&#x7A7A;&#x95F4;&#x4E2D;&#x53BB;&#xFF0C;&#x8FD9;&#x6837;&#x5C31;&#x4FDD;&#x8BC1;&#x4E86;&#x8FD9;&#x4E2A;&#x53D8;&#x91CF;&#x5BF9;&#x591A;&#x4E2A;&#x64CD;&#x4F5C;&#x7EBF;&#x7A0B;&#x7684;&#x53EF;&#x89C1;&#x6027;&#x4E86;&#x3002;&#x6362;&#x53E5;&#x8BDD;&#x8BF4;&#xFF0C;&#x88AB;volatile&#x4FEE;&#x9970;&#x7684;&#x53D8;&#x91CF;&#xFF0C;&#x80FD;&#x4FDD;&#x8BC1;&#x8BE5;&#x53D8;&#x91CF;&#x7684; &#x5355;&#x6B21;&#x8BFB;&#x6216;&#x8005;&#x5355;&#x6B21;&#x5199; &#x64CD;&#x4F5C;&#x662F;&#x539F;&#x5B50;&#x7684;&#x3002;</p>
<p>&#x4F46;&#x662F;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x662F;&#x4E24;&#x65B9;&#x9762;&#x9700;&#x8981;&#x7684; &#x539F;&#x5B50;&#x6027;(&#x6307;&#x7684;&#x662F;&#x591A;&#x6761;&#x64CD;&#x4F5C;)&#x548C;&#x53EF;&#x89C1;&#x6027;&#x3002;volatile&#x53EA;&#x80FD;&#x4FDD;&#x8BC1;&#x53EF;&#x89C1;&#x6027;&#xFF0C;synchronized&#x662F;&#x4E24;&#x4E2A;&#x5747;&#x4FDD;&#x8BC1;&#x7684;&#x3002;
volatile&#x8F7B;&#x91CF;&#x7EA7;&#xFF0C;&#x53EA;&#x80FD;&#x4FEE;&#x9970;&#x53D8;&#x91CF;&#xFF1B;synchronized&#x91CD;&#x91CF;&#x7EA7;&#xFF0C;&#x8FD8;&#x53EF;&#x4FEE;&#x9970;&#x65B9;&#x6CD5;&#x3002;
volatile&#x4E0D;&#x4F1A;&#x9020;&#x6210;&#x7EBF;&#x7A0B;&#x7684;&#x963B;&#x585E;&#xFF0C;&#x800C;synchronized&#x53EF;&#x80FD;&#x4F1A;&#x9020;&#x6210;&#x7EBF;&#x7A0B;&#x7684;&#x963B;&#x585E;&#x3002;</p>
<h2 id="&#x4EC0;&#x4E48;&#x662F;&#x7ADE;&#x4E89;&#x6761;&#x4EF6;race-condition&#xFF1F;&#x4F60;&#x600E;&#x6837;&#x53D1;&#x73B0;&#x548C;&#x89E3;&#x51B3;&#x7684;&#xFF1F;"><a name="&#x4EC0;&#x4E48;&#x662F;&#x7ADE;&#x4E89;&#x6761;&#x4EF6;race-condition&#xFF1F;&#x4F60;&#x600E;&#x6837;&#x53D1;&#x73B0;&#x548C;&#x89E3;&#x51B3;&#x7684;&#xFF1F;" class="anchor-navigation-ex-anchor" href="#&#x4EC0;&#x4E48;&#x662F;&#x7ADE;&#x4E89;&#x6761;&#x4EF6;race-condition&#xFF1F;&#x4F60;&#x600E;&#x6837;&#x53D1;&#x73B0;&#x548C;&#x89E3;&#x51B3;&#x7684;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x4EC0;&#x4E48;&#x662F;&#x7ADE;&#x4E89;&#x6761;&#x4EF6;race-condition&#xFF1F;&#x4F60;&#x600E;&#x6837;&#x53D1;&#x73B0;&#x548C;&#x89E3;&#x51B3;&#x7684;&#xFF1F;" class="plugin-anchor" href="#&#x4EC0;&#x4E48;&#x662F;&#x7ADE;&#x4E89;&#x6761;&#x4EF6;race-condition&#xFF1F;&#x4F60;&#x600E;&#x6837;&#x53D1;&#x73B0;&#x548C;&#x89E3;&#x51B3;&#x7684;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x4EC0;&#x4E48;&#x662F;&#x7ADE;&#x4E89;&#x6761;&#x4EF6;(race condition)&#xFF1F;&#x4F60;&#x600E;&#x6837;&#x53D1;&#x73B0;&#x548C;&#x89E3;&#x51B3;&#x7684;&#xFF1F;</h2>
<p>&#x8FD9;&#x662F;&#x4E00;&#x9053;&#x51FA;&#x73B0;&#x5728;&#x591A;&#x7EBF;&#x7A0B;&#x9762;&#x8BD5;&#x7684;&#x9AD8;&#x7EA7;&#x9636;&#x6BB5;&#x7684;&#x95EE;&#x9898;&#x3002;&#x5927;&#x591A;&#x6570;&#x7684;&#x9762;&#x8BD5;&#x5B98;&#x4F1A;&#x95EE;&#x6700;&#x8FD1;&#x4F60;&#x9047;&#x5230;&#x7684;&#x7ADE;&#x4E89;&#x6761;&#x4EF6;&#xFF0C;&#x4EE5;&#x53CA;&#x4F60;&#x662F;&#x600E;&#x4E48;&#x89E3;&#x51B3;&#x7684;&#x3002;&#x6709;&#x4E9B;&#x65F6;&#x95F4;&#x4ED6;&#x4EEC;&#x4F1A;&#x5199;&#x7B80;&#x5355;&#x7684;&#x4EE3;&#x7801;&#xFF0C;&#x7136;&#x540E;&#x8BA9;&#x4F60;&#x68C0;&#x6D4B;&#x51FA;&#x4EE3;&#x7801;&#x7684;&#x7ADE;&#x4E89;&#x6761;&#x4EF6;&#x3002;&#x53EF;&#x4EE5;&#x53C2;&#x8003;&#x6211;&#x4E4B;&#x524D;&#x53D1;&#x5E03;&#x7684;&#x5173;&#x4E8E;Java&#x7ADE;&#x4E89;&#x6761;&#x4EF6;&#x7684;&#x6587;&#x7AE0;&#x3002;&#x5728;&#x6211;&#x770B;&#x6765;&#x8FD9;&#x662F;&#x6700;&#x597D;&#x7684;java&#x7EBF;&#x7A0B;&#x9762;&#x8BD5;&#x95EE;&#x9898;&#x4E4B;&#x4E00;&#xFF0C;&#x5B83;&#x53EF;&#x4EE5;&#x786E;&#x5207;&#x7684;&#x68C0;&#x6D4B;&#x5019;&#x9009;&#x8005;&#x89E3;&#x51B3;&#x7ADE;&#x4E89;&#x6761;&#x4EF6;&#x7684;&#x7ECF;&#x9A8C;&#x3002;&#x5173;&#x4E8E;&#x8FD9;&#x65B9;&#x9762;&#x6700;&#x597D;&#x7684;&#x4E66;&#x662F;&#x300A;java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;&#x5B9E;&#x6218;&#x300B;&#x3002;</p>
<p>&#x5F53;&#x591A;&#x4E2A;&#x8FDB;&#x7A0B;&#x90FD;&#x4F01;&#x56FE;&#x5BF9;&#x5171;&#x4EAB;&#x6570;&#x636E;&#x8FDB;&#x884C;&#x67D0;&#x79CD;&#x5904;&#x7406;&#xFF0C;&#x800C;&#x6700;&#x540E;&#x7684;&#x7ED3;&#x679C;&#x53C8;&#x53D6;&#x51B3;&#x4E8E;&#x8FDB;&#x7A0B;&#x8FD0;&#x884C;&#x7684;&#x987A;&#x5E8F;&#x65F6;&#xFF0C;&#x5219;&#x6211;&#x4EEC;&#x8BA4;&#x4E3A;&#x8FD9;&#x53D1;&#x751F;&#x4E86;&#x7ADE;&#x4E89;&#x6761;&#x4EF6;&#xFF08;race condition&#xFF09;&#x3002;</p>
<p>&#x4E0B;&#x9762;&#x662F;&#x4E2A;&#x6700;&#x7B80;&#x5355;&#x7684;&#x4F8B;&#x5B50;&#xFF0C;&#x662F;&#x4E00;&#x4E2A;&#x5355;&#x4F8B;&#x6A21;&#x5F0F;&#x5B9E;&#x73B0;&#x7684;&#x9519;&#x8BEF;&#x793A;&#x8303;&#xFF1A;</p>
<pre><code>@NotThreadSafe
public class LazyInitRace {
    private ExpensiveObject instance = null;

    public ExpensiveObject getInstance() {
        if (instance == null)
            instance = new ExpensiveObject();
        return instance;
    }
}12345678910
</code></pre><p>&#x5728;&#x4E0A;&#x8FF0;&#x4F8B;&#x5B50;&#x4E2D;&#xFF0C;&#x8868;&#x73B0;&#x4E00;&#x79CD;&#x5F88;&#x5E38;&#x89C1;&#x7684;&#x7ADE;&#x6001;&#x6761;&#x4EF6;&#x7C7B;&#x578B;:&#x201C;&#x5148;&#x68C0;&#x67E5;&#x540E;&#x6267;&#x884C;&#x201D;&#x3002;&#x6839;&#x636E;&#x67D0;&#x4E2A;&#x68C0;&#x67E5;&#x7ED3;&#x679C;&#x6765;&#x6267;&#x884C;&#x8FDB;&#x4E00;&#x6B65;&#x7684;&#x64CD;&#x4F5C;&#xFF0C;&#x4F46;&#x5F88;&#x6709;&#x53EF;&#x80FD;&#x8FD9;&#x4E2A;&#x68C0;&#x67E5;&#x7ED3;&#x679C;&#x662F;&#x5931;&#x6548;&#x7684;&#xFF01;&#x8FD8;&#x6709;&#x5F88;&#x5E38;&#x89C1;&#x7684;&#x7ADE;&#x6001;&#x6761;&#x4EF6;&#x201C;&#x8BFB;&#x53D6;-&#x4FEE;&#x6539;-&#x5199;&#x5165;&#x201D;&#x4E09;&#x8FDE;&#xFF0C;&#x5728;&#x591A;&#x7EBF;&#x7A0B;&#x6761;&#x4EF6;&#x4E0B;&#xFF0C;&#x4E09;&#x4E2A;&#x5C0F;&#x64CD;&#x4F5C;&#x5E76;&#x4E0D;&#x4E00;&#x5B9A;&#x4F1A;&#x653E;&#x5728;&#x4E00;&#x8D77;&#x6267;&#x884C;&#x7684;&#x3002;</p>
<p>&#x5982;&#x4F55;&#x5BF9;&#x5F85;&#x7ADE;&#x6001;&#x6761;&#x4EF6;&#xFF1F;
&#x9996;&#x5148;&#xFF0C;&#x8B66;&#x60D5;&#x590D;&#x5408;&#x64CD;&#x4F5C;&#xFF0C;&#x5F53;&#x591A;&#x4E2A;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#x5408;&#x5728;&#x4E00;&#x8D77;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5E76;&#x4E0D;&#x4E00;&#x5B9A;&#x4ECD;&#x7136;&#x662F;&#x4E00;&#x4E2A;&#x539F;&#x5B50;&#x64CD;&#x4F5C;&#xFF0C;&#x6B64;&#x65F6;&#x9700;&#x8981;&#x7528;&#x540C;&#x6B65;&#x7684;&#x624B;&#x6BB5;&#x6765;&#x4FDD;&#x8BC1;&#x539F;&#x5B50;&#x6027;&#x3002;
&#x53E6;&#x5916;&#xFF0C;&#x4F7F;&#x7528;&#x672C;&#x8EAB;&#x662F;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x7684;&#x7C7B;&#xFF0C;&#x8FD9;&#x6837;&#x5728;&#x5F88;&#x5927;&#x7A0B;&#x5EA6;&#x4E0A;&#x907F;&#x514D;&#x4E86;&#x672A;&#x77E5;&#x7684;&#x98CE;&#x9669;&#x3002;</p>
<h2 id="hhread-jump"><a name="hhread-jump" class="anchor-navigation-ex-anchor" href="#hhread-jump"><i class="fa fa-link" aria-hidden="true"></i></a><a name="hhread-jump" class="plugin-anchor" href="#hhread-jump"><i class="fa fa-link" aria-hidden="true"></i></a>Hhread Jump</h2>
<p><a href="https://www.cnblogs.com/wx170119/p/10451812.html" target="_blank">https://www.cnblogs.com/wx170119/p/10451812.html</a></p>
<p>&#x5728;UNIX&#x4E2D;&#x4F60;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;kill -3&#xFF0C;&#x7136;&#x540E;thread dump&#x5C06;&#x4F1A;&#x6253;&#x5370;&#x65E5;&#x5FD7;&#xFF0C;&#x5728;windows&#x4E2D;&#x4F60;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x201D;CTRL+Break&#x201D;&#x3002;&#x975E;&#x5E38;&#x7B80;&#x5355;&#x548C;&#x4E13;&#x4E1A;&#x7684;&#x7EBF;&#x7A0B;&#x9762;&#x8BD5;&#x95EE;&#x9898;&#xFF0C;&#x4F46;&#x662F;&#x5982;&#x679C;&#x4ED6;&#x95EE;&#x4F60;&#x600E;&#x6837;&#x5206;&#x6790;&#x5B83;&#xFF0C;&#x5C31;&#x4F1A;&#x5F88;&#x68D8;&#x624B;&#x3002;</p>
<p>SIGQUIT&#xFF08;kill -3 pid&#xFF09;&#x7528;&#x6765;&#x6253;&#x5370;Java&#x8FDB;&#x7A0B;trace&#xFF0C;&#x5E76;&#x4E0D;&#x4F1A;&#x5F71;&#x54CD;&#x7A0B;&#x5E8F;&#x8FD0;&#x884C;&#xFF0C;&#x4E0D;&#x7528;&#x62C5;&#x5FC3;&#x4ED6;&#x628A;&#x7A0B;&#x5E8F;&#x6740;&#x6B7B;&#x4E86;&#xFF1B;SIGUSR1&#xFF08;kill -10 pid&#xFF09;&#x53EF;&#x89E6;&#x53D1;&#x8FDB;&#x7A0B;&#x8FDB;&#x884C;&#x4E00;&#x6B21;&#x5F3A;&#x5236;GC&#x3002;</p>
<h3 id="java&#x7EBF;&#x7A0B;&#x7684;&#x72B6;&#x6001;&#x8F6C;&#x6362;&#x4ECB;&#x7ECD;"><a name="java&#x7EBF;&#x7A0B;&#x7684;&#x72B6;&#x6001;&#x8F6C;&#x6362;&#x4ECB;&#x7ECD;" class="anchor-navigation-ex-anchor" href="#java&#x7EBF;&#x7A0B;&#x7684;&#x72B6;&#x6001;&#x8F6C;&#x6362;&#x4ECB;&#x7ECD;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="java&#x7EBF;&#x7A0B;&#x7684;&#x72B6;&#x6001;&#x8F6C;&#x6362;&#x4ECB;&#x7ECD;" class="plugin-anchor" href="#java&#x7EBF;&#x7A0B;&#x7684;&#x72B6;&#x6001;&#x8F6C;&#x6362;&#x4ECB;&#x7ECD;"><i class="fa fa-link" aria-hidden="true"></i></a>java&#x7EBF;&#x7A0B;&#x7684;&#x72B6;&#x6001;&#x8F6C;&#x6362;&#x4ECB;&#x7ECD;</h3>
<p>&#x540E;&#x7EED;&#x5206;&#x6790;&#x8981;&#x7528;&#x5230;&#xFF0C;&#x6240;&#x4EE5;&#x6B64;&#x5904;&#x7A7F;&#x63D2;&#x4E00;&#x4E0B;&#x8FD9;&#x4E2A;&#x70B9;&#xFF1A;
<img src="https://gitee.com/zisuu/picture/raw/master/img/20201216214235.jpeg" alt="java&#x7EBF;&#x7A0B;&#x7684;&#x72B6;&#x6001;&#x8F6C;&#x6362;"></p>
<ul>
<li><p><strong>&#x65B0;&#x5EFA;&#x72B6;&#x6001;&#xFF08;New&#xFF09;</strong>
&#x7528;new&#x8BED;&#x53E5;&#x521B;&#x5EFA;&#x7684;&#x7EBF;&#x7A0B;&#x5904;&#x4E8E;&#x65B0;&#x5EFA;&#x72B6;&#x6001;&#xFF0C;&#x6B64;&#x65F6;&#x5B83;&#x548C;&#x5176;&#x4ED6;Java&#x5BF9;&#x8C61;&#x4E00;&#x6837;&#xFF0C;&#x4EC5;&#x4EC5;&#x5728;&#x5806;&#x533A;&#x4E2D;&#x88AB;&#x5206;&#x914D;&#x4E86;&#x5185;&#x5B58;&#x3002;</p>
</li>
<li><p><strong>&#x5C31;&#x7EEA;&#x72B6;&#x6001;&#xFF08;Runnable&#xFF09;</strong>
&#x5F53;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x5BF9;&#x8C61;&#x521B;&#x5EFA;&#x540E;&#xFF0C;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x8C03;&#x7528;&#x5B83;&#x7684;start()&#x65B9;&#x6CD5;&#xFF0C;&#x8BE5;&#x7EBF;&#x7A0B;&#x5C31;&#x8FDB;&#x5165;&#x5C31;&#x7EEA;&#x72B6;&#x6001;&#xFF0C;Java&#x865A;&#x62DF;&#x673A;&#x4F1A;&#x4E3A;&#x5B83;&#x521B;&#x5EFA;&#x65B9;&#x6CD5;&#x8C03;&#x7528;&#x6808;&#x548C;&#x7A0B;&#x5E8F;&#x8BA1;&#x6570;&#x5668;&#x3002;&#x5904;&#x4E8E;&#x8FD9;&#x4E2A;&#x72B6;&#x6001;&#x7684;&#x7EBF;&#x7A0B;&#x4F4D;&#x4E8E;&#x53EF;&#x8FD0;&#x884C;&#x6C60;&#x4E2D;&#xFF0C;&#x7B49;&#x5F85;&#x83B7;&#x5F97;CPU&#x7684;&#x4F7F;&#x7528;&#x6743;&#x3002;</p>
</li>
<li><p><strong>&#x8FD0;&#x884C;&#x72B6;&#x6001;&#xFF08;Running&#xFF09;</strong>
&#x5904;&#x4E8E;&#x8FD9;&#x4E2A;&#x72B6;&#x6001;&#x7684;&#x7EBF;&#x7A0B;&#x5360;&#x7528;CPU&#xFF0C;&#x6267;&#x884C;&#x7A0B;&#x5E8F;&#x4EE3;&#x7801;&#x3002;&#x53EA;&#x6709;&#x5904;&#x4E8E;&#x5C31;&#x7EEA;&#x72B6;&#x6001;&#x7684;&#x7EBF;&#x7A0B;&#x624D;&#x6709;&#x673A;&#x4F1A;&#x8F6C;&#x5230;&#x8FD0;&#x884C;&#x72B6;&#x6001;&#x3002;</p>
</li>
<li><p>&#x963B;&#x585E;&#x72B6;&#x6001;&#xFF08;Blocked&#xFF09;</p>
<p>&#x963B;&#x585E;&#x72B6;&#x6001;&#x662F;&#x6307;&#x7EBF;&#x7A0B;&#x56E0;&#x4E3A;&#x67D0;&#x4E9B;&#x539F;&#x56E0;&#x653E;&#x5F03;CPU&#xFF0C;&#x6682;&#x65F6;&#x505C;&#x6B62;&#x8FD0;&#x884C;&#x3002;&#x5F53;&#x7EBF;&#x7A0B;&#x5904;&#x4E8E;&#x963B;&#x585E;&#x72B6;&#x6001;&#x65F6;&#xFF0C;Java&#x865A;&#x62DF;&#x673A;&#x4E0D;&#x4F1A;&#x7ED9;&#x7EBF;&#x7A0B;&#x5206;&#x914D;CPU&#x3002;&#x76F4;&#x5230;&#x7EBF;&#x7A0B;&#x91CD;&#x65B0;&#x8FDB;&#x5165;&#x5C31;&#x7EEA;&#x72B6;&#x6001;&#xFF0C;&#x5B83;&#x624D;&#x6709;&#x673A;&#x4F1A;&#x8F6C;&#x5230;&#x8FD0;&#x884C;&#x72B6;&#x6001;&#x3002;</p>
<p>&#x963B;&#x585E;&#x72B6;&#x6001;&#x53EF;&#x5206;&#x4E3A;&#x4EE5;&#x4E0B;3&#x79CD;&#xFF1A;</p>
<ol>
<li>&#x4F4D;&#x4E8E;&#x5BF9;&#x8C61;&#x7B49;&#x5F85;&#x6C60;&#x4E2D;&#x7684;&#x963B;&#x585E;&#x72B6;&#x6001;&#xFF08;Blocked in object&#x2019;s wait pool&#xFF09;&#xFF1A;&#x5F53;&#x7EBF;&#x7A0B;&#x5904;&#x4E8E;&#x8FD0;&#x884C;&#x72B6;&#x6001;&#x65F6;&#xFF0C;&#x5982;&#x679C;&#x6267;&#x884C;&#x4E86;&#x67D0;&#x4E2A;&#x5BF9;&#x8C61;&#x7684;wait()&#x65B9;&#x6CD5;&#xFF0C;Java&#x865A;&#x62DF;&#x673A;&#x5C31;&#x4F1A;&#x628A;&#x7EBF;&#x7A0B;&#x653E;&#x5230;&#x8FD9;&#x4E2A;&#x5BF9;&#x8C61;&#x7684;&#x7B49;&#x5F85;&#x6C60;&#x4E2D;&#xFF0C;&#x8FD9;&#x6D89;&#x53CA;&#x5230;&#x201C;&#x7EBF;&#x7A0B;&#x901A;&#x4FE1;&#x201D;&#x7684;&#x5185;&#x5BB9;&#x3002;</li>
<li>&#x4F4D;&#x4E8E;&#x5BF9;&#x8C61;&#x9501;&#x6C60;&#x4E2D;&#x7684;&#x963B;&#x585E;&#x72B6;&#x6001;&#xFF08;Blocked in object&#x2019;s lock pool&#xFF09;&#xFF1A;&#x5F53;&#x7EBF;&#x7A0B;&#x5904;&#x4E8E;&#x8FD0;&#x884C;&#x72B6;&#x6001;&#x65F6;&#xFF0C;&#x8BD5;&#x56FE;&#x83B7;&#x5F97;&#x67D0;&#x4E2A;&#x5BF9;&#x8C61;&#x7684;&#x540C;&#x6B65;&#x9501;&#x65F6;&#xFF0C;&#x5982;&#x679C;&#x8BE5;&#x5BF9;&#x8C61;&#x7684;&#x540C;&#x6B65;&#x9501;&#x5DF2;&#x7ECF;&#x88AB;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x5360;&#x7528;&#xFF0C;Java&#x865A;&#x62DF;&#x673A;&#x5C31;&#x4F1A;&#x628A;&#x8FD9;&#x4E2A;&#x7EBF;&#x7A0B;&#x653E;&#x5230;&#x8FD9;&#x4E2A;&#x5BF9;&#x8C61;&#x7684;&#x9501;&#x6C60;&#x4E2D;&#xFF0C;&#x8FD9;&#x6D89;&#x53CA;&#x5230;&#x201C;&#x7EBF;&#x7A0B;&#x540C;&#x6B65;&#x201D;&#x7684;&#x5185;&#x5BB9;&#x3002;</li>
<li>&#x5176;&#x4ED6;&#x963B;&#x585E;&#x72B6;&#x6001;&#xFF08;Otherwise Blocked&#xFF09;&#xFF1A;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x6267;&#x884C;&#x4E86;sleep()&#x65B9;&#x6CD5;&#xFF0C;&#x6216;&#x8005;&#x8C03;&#x7528;&#x4E86;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x7684;join()&#x65B9;&#x6CD5;&#xFF0C;&#x6216;&#x8005;&#x53D1;&#x51FA;&#x4E86;I/O&#x8BF7;&#x6C42;&#x65F6;&#xFF0C;&#x5C31;&#x4F1A;&#x8FDB;&#x5165;&#x8FD9;&#x4E2A;&#x72B6;&#x6001;&#x3002;</li>
</ol>
</li>
<li><p><strong>&#x6B7B;&#x4EA1;&#x72B6;&#x6001;&#xFF08;Dead&#xFF09;</strong>
&#x5F53;&#x7EBF;&#x7A0B;&#x9000;&#x51FA;run()&#x65B9;&#x6CD5;&#x65F6;&#xFF0C;&#x5C31;&#x8FDB;&#x5165;&#x6B7B;&#x4EA1;&#x72B6;&#x6001;&#xFF0C;&#x8BE5;&#x7EBF;&#x7A0B;&#x7ED3;&#x675F;&#x751F;&#x547D;&#x5468;&#x671F;&#x3002;</p>
</li>
</ul>
<p>&#x6211;&#x4EEC;&#x8FD0;&#x884C;&#x4E4B;&#x524D;&#x7684;&#x90A3;&#x4E2A;&#x6B7B;&#x9501;&#x4EE3;&#x7801;SimpleDeadLock.java&#xFF0C;&#x7136;&#x540E;&#x5C1D;&#x8BD5;&#x8F93;&#x51FA;&#x4FE1;&#x606F;(/<em>&#x8FD9;&#x662F;&#x6CE8;&#x91CA;&#xFF0C;&#x4F5C;&#x8005;&#x81EA;&#x5DF1;&#x52A0;&#x7684;</em>/)&#xFF1A;</p>
<pre><code>/* &#x65F6;&#x95F4;&#xFF0C;jvm&#x4FE1;&#x606F; */
2017-11-01 17:36:28
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.144-b01 mixed mode):

/* &#x7EBF;&#x7A0B;&#x540D;&#x79F0;&#xFF1A;DestroyJavaVM
&#x7F16;&#x53F7;&#xFF1A;#13
&#x4F18;&#x5148;&#x7EA7;&#xFF1A;5
&#x7CFB;&#x7EDF;&#x4F18;&#x5148;&#x7EA7;&#xFF1A;0
jvm&#x5185;&#x90E8;&#x7EBF;&#x7A0B;id&#xFF1A;0x0000000001c88800
&#x5BF9;&#x5E94;&#x7CFB;&#x7EDF;&#x7EBF;&#x7A0B;id&#xFF08;NativeThread ID&#xFF09;&#xFF1A;0x1c18
&#x7EBF;&#x7A0B;&#x72B6;&#x6001;&#xFF1A; waiting on condition [0x0000000000000000]  &#xFF08;&#x7B49;&#x5F85;&#x67D0;&#x4E2A;&#x6761;&#x4EF6;&#xFF09;
&#x7EBF;&#x7A0B;&#x8BE6;&#x7EC6;&#x72B6;&#x6001;&#xFF1A;java.lang.Thread.State: RUNNABLE  &#x53CA;&#x4E4B;&#x540E;&#x6240;&#x6709;*/
&quot;DestroyJavaVM&quot; #13 prio=5 os_prio=0 tid=0x0000000001c88800 nid=0x1c18 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

&quot;Thread-1&quot; #12 prio=5 os_prio=0 tid=0x0000000018d49000 nid=0x17b8 waiting for monitor entry [0x0000000019d7f000]
/* &#x7EBF;&#x7A0B;&#x72B6;&#x6001;&#xFF1A;&#x963B;&#x585E;&#xFF08;&#x5728;&#x5BF9;&#x8C61;&#x540C;&#x6B65;&#x4E0A;&#xFF09;
    &#x4EE3;&#x7801;&#x4F4D;&#x7F6E;&#xFF1A;at com.leo.interview.SimpleDeadLock$B.run(SimpleDeadLock.java:56)
    &#x7B49;&#x5F85;&#x9501;&#xFF1A;0x00000000d629b4d8 
    &#x5DF2;&#x7ECF;&#x83B7;&#x5F97;&#x9501;&#xFF1A;0x00000000d629b4e8*/
   java.lang.Thread.State: BLOCKED (on object monitor)
    at com.leo.interview.SimpleDeadLock$B.run(SimpleDeadLock.java:56)
    - waiting to lock &lt;0x00000000d629b4d8&gt; (a java.lang.Object)
    - locked &lt;0x00000000d629b4e8&gt; (a java.lang.Object)

&quot;Thread-0&quot; #11 prio=5 os_prio=0 tid=0x0000000018d44000 nid=0x1ebc waiting for monitor entry [0x000000001907f000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at com.leo.interview.SimpleDeadLock$A.run(SimpleDeadLock.java:34)
    - waiting to lock &lt;0x00000000d629b4e8&gt; (a java.lang.Object)
    - locked &lt;0x00000000d629b4d8&gt; (a java.lang.Object)

&quot;Service Thread&quot; #10 daemon prio=9 os_prio=0 tid=0x0000000018ca5000 nid=0x1264 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

&quot;C1 CompilerThread2&quot; #9 daemon prio=9 os_prio=2 tid=0x0000000018c46000 nid=0xb8c waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

&quot;C2 CompilerThread1&quot; #8 daemon prio=9 os_prio=2 tid=0x0000000018be4800 nid=0x1db4 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

&quot;C2 CompilerThread0&quot; #7 daemon prio=9 os_prio=2 tid=0x0000000018be3800 nid=0x810 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

&quot;Monitor Ctrl-Break&quot; #6 daemon prio=5 os_prio=0 tid=0x0000000018bcc800 nid=0x1c24 runnable [0x00000000193ce000]
   java.lang.Thread.State: RUNNABLE
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
    at java.net.SocketInputStream.read(SocketInputStream.java:171)
    at java.net.SocketInputStream.read(SocketInputStream.java:141)
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
    - locked &lt;0x00000000d632b928&gt; (a java.io.InputStreamReader)
    at java.io.InputStreamReader.read(InputStreamReader.java:184)
    at java.io.BufferedReader.fill(BufferedReader.java:161)
    at java.io.BufferedReader.readLine(BufferedReader.java:324)
    - locked &lt;0x00000000d632b928&gt; (a java.io.InputStreamReader)
    at java.io.BufferedReader.readLine(BufferedReader.java:389)
    at com.intellij.rt.execution.application.AppMainV2$1.run(AppMainV2.java:64)

&quot;Attach Listener&quot; #5 daemon prio=5 os_prio=2 tid=0x0000000017781800 nid=0x524 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

&quot;Signal Dispatcher&quot; #4 daemon prio=9 os_prio=2 tid=0x000000001778f800 nid=0x1b08 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

&quot;Finalizer&quot; #3 daemon prio=8 os_prio=1 tid=0x000000001776a800 nid=0xdac in Object.wait() [0x0000000018b6f000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on &lt;0x00000000d6108ec8&gt; (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
    - locked &lt;0x00000000d6108ec8&gt; (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
    at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)

&quot;Reference Handler&quot; #2 daemon prio=10 os_prio=2 tid=0x0000000017723800 nid=0x1670 in Object.wait() [0x00000000189ef000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on &lt;0x00000000d6106b68&gt; (a java.lang.ref.Reference$Lock)
    at java.lang.Object.wait(Object.java:502)
    at java.lang.ref.Reference.tryHandlePending(Reference.java:191)
    - locked &lt;0x00000000d6106b68&gt; (a java.lang.ref.Reference$Lock)
    at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)

&quot;VM Thread&quot; os_prio=2 tid=0x000000001771b800 nid=0x604 runnable 

&quot;GC task thread#0 (ParallelGC)&quot; os_prio=0 tid=0x0000000001c9d800 nid=0x9f0 runnable 

&quot;GC task thread#1 (ParallelGC)&quot; os_prio=0 tid=0x0000000001c9f000 nid=0x154c runnable 

&quot;GC task thread#2 (ParallelGC)&quot; os_prio=0 tid=0x0000000001ca0800 nid=0xcd0 runnable 

&quot;GC task thread#3 (ParallelGC)&quot; os_prio=0 tid=0x0000000001ca2000 nid=0x1e58 runnable 

&quot;VM Periodic Task Thread&quot; os_prio=2 tid=0x0000000018c5a000 nid=0x1b58 waiting on condition 

JNI global references: 33


/* &#x6B64;&#x5904;&#x53EF;&#x4EE5;&#x770B;&#x5F85;&#x6B7B;&#x9501;&#x7684;&#x76F8;&#x5173;&#x4FE1;&#x606F;&#xFF01; */
Found one Java-level deadlock:
=============================
&quot;Thread-1&quot;:
  waiting to lock monitor 0x0000000017729fc8 (object 0x00000000d629b4d8, a java.lang.Object),
  which is held by &quot;Thread-0&quot;
&quot;Thread-0&quot;:
  waiting to lock monitor 0x0000000017727738 (object 0x00000000d629b4e8, a java.lang.Object),
  which is held by &quot;Thread-1&quot;

Java stack information for the threads listed above:
===================================================
&quot;Thread-1&quot;:
    at com.leo.interview.SimpleDeadLock$B.run(SimpleDeadLock.java:56)
    - waiting to lock &lt;0x00000000d629b4d8&gt; (a java.lang.Object)
    - locked &lt;0x00000000d629b4e8&gt; (a java.lang.Object)
&quot;Thread-0&quot;:
    at com.leo.interview.SimpleDeadLock$A.run(SimpleDeadLock.java:34)
    - waiting to lock &lt;0x00000000d629b4e8&gt; (a java.lang.Object)
    - locked &lt;0x00000000d629b4d8&gt; (a java.lang.Object)

Found 1 deadlock.

/* &#x5185;&#x5B58;&#x4F7F;&#x7528;&#x72B6;&#x51B5;&#xFF0C;&#x8BE6;&#x60C5;&#x5F97;&#x770B;JVM&#x65B9;&#x9762;&#x7684;&#x4E66; */
Heap
 PSYoungGen      total 37888K, used 4590K [0x00000000d6100000, 0x00000000d8b00000, 0x0000000100000000)
  eden space 32768K, 14% used [0x00000000d6100000,0x00000000d657b968,0x00000000d8100000)
  from space 5120K, 0% used [0x00000000d8600000,0x00000000d8600000,0x00000000d8b00000)
  to   space 5120K, 0% used [0x00000000d8100000,0x00000000d8100000,0x00000000d8600000)
 ParOldGen       total 86016K, used 0K [0x0000000082200000, 0x0000000087600000, 0x00000000d6100000)
  object space 86016K, 0% used [0x0000000082200000,0x0000000082200000,0x0000000087600000)
 Metaspace       used 3474K, capacity 4500K, committed 4864K, reserved 1056768K
  class space    used 382K, capacity 388K, committed 512K, reserved 1048576K123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
</code></pre><h2 id="&#x4E3A;&#x4EC0;&#x4E48;&#x6211;&#x4EEC;&#x8C03;&#x7528;start&#x65B9;&#x6CD5;&#x65F6;&#x4F1A;&#x6267;&#x884C;run&#x65B9;&#x6CD5;&#xFF0C;&#x4E3A;&#x4EC0;&#x4E48;&#x6211;&#x4EEC;&#x4E0D;&#x80FD;&#x76F4;&#x63A5;&#x8C03;&#x7528;run&#x65B9;&#x6CD5;&#xFF1F;"><a name="&#x4E3A;&#x4EC0;&#x4E48;&#x6211;&#x4EEC;&#x8C03;&#x7528;start&#x65B9;&#x6CD5;&#x65F6;&#x4F1A;&#x6267;&#x884C;run&#x65B9;&#x6CD5;&#xFF0C;&#x4E3A;&#x4EC0;&#x4E48;&#x6211;&#x4EEC;&#x4E0D;&#x80FD;&#x76F4;&#x63A5;&#x8C03;&#x7528;run&#x65B9;&#x6CD5;&#xFF1F;" class="anchor-navigation-ex-anchor" href="#&#x4E3A;&#x4EC0;&#x4E48;&#x6211;&#x4EEC;&#x8C03;&#x7528;start&#x65B9;&#x6CD5;&#x65F6;&#x4F1A;&#x6267;&#x884C;run&#x65B9;&#x6CD5;&#xFF0C;&#x4E3A;&#x4EC0;&#x4E48;&#x6211;&#x4EEC;&#x4E0D;&#x80FD;&#x76F4;&#x63A5;&#x8C03;&#x7528;run&#x65B9;&#x6CD5;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x4E3A;&#x4EC0;&#x4E48;&#x6211;&#x4EEC;&#x8C03;&#x7528;start&#x65B9;&#x6CD5;&#x65F6;&#x4F1A;&#x6267;&#x884C;run&#x65B9;&#x6CD5;&#xFF0C;&#x4E3A;&#x4EC0;&#x4E48;&#x6211;&#x4EEC;&#x4E0D;&#x80FD;&#x76F4;&#x63A5;&#x8C03;&#x7528;run&#x65B9;&#x6CD5;&#xFF1F;" class="plugin-anchor" href="#&#x4E3A;&#x4EC0;&#x4E48;&#x6211;&#x4EEC;&#x8C03;&#x7528;start&#x65B9;&#x6CD5;&#x65F6;&#x4F1A;&#x6267;&#x884C;run&#x65B9;&#x6CD5;&#xFF0C;&#x4E3A;&#x4EC0;&#x4E48;&#x6211;&#x4EEC;&#x4E0D;&#x80FD;&#x76F4;&#x63A5;&#x8C03;&#x7528;run&#x65B9;&#x6CD5;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x4E3A;&#x4EC0;&#x4E48;&#x6211;&#x4EEC;&#x8C03;&#x7528;start()&#x65B9;&#x6CD5;&#x65F6;&#x4F1A;&#x6267;&#x884C;run()&#x65B9;&#x6CD5;&#xFF0C;&#x4E3A;&#x4EC0;&#x4E48;&#x6211;&#x4EEC;&#x4E0D;&#x80FD;&#x76F4;&#x63A5;&#x8C03;&#x7528;run()&#x65B9;&#x6CD5;&#xFF1F;</h2>
<p>&#x8FD9;&#x662F;&#x53E6;&#x4E00;&#x4E2A;&#x975E;&#x5E38;&#x7ECF;&#x5178;&#x7684;java&#x591A;&#x7EBF;&#x7A0B;&#x9762;&#x8BD5;&#x95EE;&#x9898;&#x3002;&#x8FD9;&#x4E5F;&#x662F;&#x6211;&#x521A;&#x5F00;&#x59CB;&#x5199;&#x7EBF;&#x7A0B;&#x7A0B;&#x5E8F;&#x65F6;&#x5019;&#x7684;&#x56F0;&#x60D1;&#x3002;&#x73B0;&#x5728;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#x901A;&#x5E38;&#x5728;&#x7535;&#x8BDD;&#x9762;&#x8BD5;&#x6216;&#x8005;&#x662F;&#x5728;&#x521D;&#x4E2D;&#x7EA7;Java&#x9762;&#x8BD5;&#x7684;&#x7B2C;&#x4E00;&#x8F6E;&#x88AB;&#x95EE;&#x5230;&#x3002;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#x7684;&#x56DE;&#x7B54;&#x5E94;&#x8BE5;&#x662F;&#x8FD9;&#x6837;&#x7684;&#xFF0C;&#x5F53;&#x4F60;&#x8C03;&#x7528;start()&#x65B9;&#x6CD5;&#x65F6;&#x4F60;&#x5C06;&#x521B;&#x5EFA;&#x65B0;&#x7684;&#x7EBF;&#x7A0B;&#xFF0C;&#x5E76;&#x4E14;&#x6267;&#x884C;&#x5728;run()&#x65B9;&#x6CD5;&#x91CC;&#x7684;&#x4EE3;&#x7801;&#x3002;&#x4F46;&#x662F;&#x5982;&#x679C;&#x4F60;&#x76F4;&#x63A5;&#x8C03;&#x7528;run()&#x65B9;&#x6CD5;&#xFF0C;&#x5B83;&#x4E0D;&#x4F1A;&#x521B;&#x5EFA;&#x65B0;&#x7684;&#x7EBF;&#x7A0B;&#x4E5F;&#x4E0D;&#x4F1A;&#x6267;&#x884C;&#x8C03;&#x7528;&#x7EBF;&#x7A0B;&#x7684;&#x4EE3;&#x7801;&#x3002;</p>
<p>&#x7B80;&#x5355;&#x70B9;&#x6765;&#x8BF4;&#xFF1A;
new&#x4E00;&#x4E2A;Thread&#xFF0C;&#x7EBF;&#x7A0B;&#x8FDB;&#x5165;&#x4E86;&#x65B0;&#x5EFA;&#x72B6;&#x6001;;&#x8C03;&#x7528;start()&#x65B9;&#x6CD5;&#xFF0C;&#x7EBF;&#x7A0B;&#x8FDB;&#x5165;&#x4E86;&#x5C31;&#x7EEA;&#x72B6;&#x6001;&#xFF0C;&#x5F53;&#x5206;&#x914D;&#x5230;&#x65F6;&#x95F4;&#x7247;&#x540E;&#x5C31;&#x53EF;&#x4EE5;&#x5F00;&#x59CB;&#x8FD0;&#x884C;&#x4E86;&#x3002;
start()&#x4F1A;&#x6267;&#x884C;&#x7EBF;&#x7A0B;&#x7684;&#x76F8;&#x5E94;&#x51C6;&#x5907;&#x5DE5;&#x4F5C;&#xFF0C;&#x7136;&#x540E;&#x81EA;&#x52A8;&#x6267;&#x884C;run()&#x65B9;&#x6CD5;&#x7684;&#x5185;&#x5BB9;&#x3002;&#x662F;&#x771F;&#x6B63;&#x7684;&#x591A;&#x7EBF;&#x7A0B;&#x5DE5;&#x4F5C;&#x3002;
&#x800C;&#x76F4;&#x63A5;&#x6267;&#x884C;run()&#x65B9;&#x6CD5;&#xFF0C;&#x4F1A;&#x628A;run&#x65B9;&#x6CD5;&#x5F53;&#x6210;&#x4E00;&#x4E2A;mian&#x7EBF;&#x7A0B;&#x4E0B;&#x7684;&#x666E;&#x901A;&#x65B9;&#x6CD5;&#x53BB;&#x6267;&#x884C;&#xFF0C;&#x5E76;&#x4E0D;&#x4F1A;&#x5728;&#x67D0;&#x4E2A;&#x7EBF;&#x7A0B;&#x4E2D;&#x6267;&#x884C;&#x5B83;&#xFF0C;&#x8FD9;&#x5E76;&#x4E0D;&#x662F;&#x591A;&#x7EBF;&#x7A0B;&#x5DE5;&#x4F5C;&#x3002;</p>
<h2 id="java&#x4E2D;&#x4F60;&#x600E;&#x6837;&#x5524;&#x9192;&#x4E00;&#x4E2A;&#x963B;&#x585E;&#x7684;&#x7EBF;&#x7A0B;&#xFF1F;"><a name="java&#x4E2D;&#x4F60;&#x600E;&#x6837;&#x5524;&#x9192;&#x4E00;&#x4E2A;&#x963B;&#x585E;&#x7684;&#x7EBF;&#x7A0B;&#xFF1F;" class="anchor-navigation-ex-anchor" href="#java&#x4E2D;&#x4F60;&#x600E;&#x6837;&#x5524;&#x9192;&#x4E00;&#x4E2A;&#x963B;&#x585E;&#x7684;&#x7EBF;&#x7A0B;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="java&#x4E2D;&#x4F60;&#x600E;&#x6837;&#x5524;&#x9192;&#x4E00;&#x4E2A;&#x963B;&#x585E;&#x7684;&#x7EBF;&#x7A0B;&#xFF1F;" class="plugin-anchor" href="#java&#x4E2D;&#x4F60;&#x600E;&#x6837;&#x5524;&#x9192;&#x4E00;&#x4E2A;&#x963B;&#x585E;&#x7684;&#x7EBF;&#x7A0B;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a>Java&#x4E2D;&#x4F60;&#x600E;&#x6837;&#x5524;&#x9192;&#x4E00;&#x4E2A;&#x963B;&#x585E;&#x7684;&#x7EBF;&#x7A0B;&#xFF1F;</h2>
<p>&#x8FD9;&#x662F;&#x4E2A;&#x5173;&#x4E8E;&#x7EBF;&#x7A0B;&#x548C;&#x963B;&#x585E;&#x7684;&#x68D8;&#x624B;&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x5B83;&#x6709;&#x5F88;&#x591A;&#x89E3;&#x51B3;&#x65B9;&#x6CD5;&#x3002;&#x5982;&#x679C;&#x7EBF;&#x7A0B;&#x9047;&#x5230;&#x4E86;IO&#x963B;&#x585E;&#xFF0C;&#x6211;&#x5E76;&#x4E14;&#x4E0D;&#x8BA4;&#x4E3A;&#x6709;&#x4E00;&#x79CD;&#x65B9;&#x6CD5;&#x53EF;&#x4EE5;&#x4E2D;&#x6B62;&#x7EBF;&#x7A0B;&#x3002;&#x5982;&#x679C;&#x7EBF;&#x7A0B;&#x56E0;&#x4E3A;&#x8C03;&#x7528;wait()&#x3001;sleep()&#x3001;&#x6216;&#x8005;join()&#x65B9;&#x6CD5;&#x800C;&#x5BFC;&#x81F4;&#x7684;&#x963B;&#x585E;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x4E2D;&#x65AD;&#x7EBF;&#x7A0B;&#xFF0C;&#x5E76;&#x4E14;&#x901A;&#x8FC7;&#x629B;&#x51FA;InterruptedException&#x6765;&#x5524;&#x9192;&#x5B83;&#x3002;&#x6211;&#x4E4B;&#x524D;&#x5199;&#x7684;&#x300A;How to deal with blocking methods in java&#x300B;&#x6709;&#x5F88;&#x591A;&#x5173;&#x4E8E;&#x5904;&#x7406;&#x7EBF;&#x7A0B;&#x963B;&#x585E;&#x7684;&#x4FE1;&#x606F;&#x3002;</p>
<p>&#x8FD9;&#x4E2A;&#x6211;&#x4EEC;&#x5148;&#x7B80;&#x5355;&#x7C97;&#x66B4;&#x5730;&#x5BF9;&#x67D0;&#x4E9B;&#x963B;&#x585E;&#x65B9;&#x6CD5;&#x8FDB;&#x884C;&#x5206;&#x7C7B;&#xFF1A;
- &#x4F1A;&#x629B;&#x51FA;InterruptedException&#x7684;&#x65B9;&#x6CD5;&#xFF1A;wait&#x3001;sleep&#x3001;join&#x3001;Lock.lockInterruptibly&#x7B49;&#xFF0C;&#x9488;&#x5BF9;&#x8FD9;&#x7C7B;&#x65B9;&#x6CD5;&#xFF0C;&#x6211;&#x4EEC;&#x5728;&#x7EBF;&#x7A0B;&#x5185;&#x90E8;&#x5904;&#x7406;&#x597D;&#x5F02;&#x5E38;(&#x8981;&#x4E0D;&#x5B8C;&#x5168;&#x5185;&#x90E8;&#x5904;&#x7406;&#xFF0C;&#x8981;&#x4E0D;&#x628A;&#x8FD9;&#x4E2A;&#x5F02;&#x5E38;&#x629B;&#x51FA;&#x53BB;)&#xFF0C;&#x7136;&#x540E;&#x5C31;&#x53EF;&#x4EE5;&#x5B9E;&#x73B0;&#x5524;&#x9192;&#x3002;
- &#x4E0D;&#x4F1A;&#x629B;InterruptedException&#x7684;&#x65B9;&#x6CD5;&#xFF1A;Socket&#x7684;I/O,&#x540C;&#x6B65;I/O&#xFF0C;Lock.lock&#x7B49;&#x3002;&#x5BF9;&#x4E8E;I/O&#x7C7B;&#x578B;&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x5173;&#x95ED;&#x4ED6;&#x4EEC;&#x5E95;&#x5C42;&#x7684;&#x901A;&#x9053;&#xFF0C;&#x6BD4;&#x5982;Socket&#x7684;I/O&#xFF0C;&#x5173;&#x95ED;&#x5E95;&#x5C42;&#x5957;&#x63A5;&#x5B57;&#xFF0C;&#x7136;&#x540E;&#x629B;&#x51FA;&#x5F02;&#x5E38;&#x5904;&#x7406;&#x5C31;&#x597D;&#x4E86;;&#x6BD4;&#x5982;&#x540C;&#x6B65;I/O&#xFF0C;&#x5173;&#x95ED;&#x5E95;&#x5C42;Channel&#x7136;&#x540E;&#x5904;&#x7406;&#x5F02;&#x5E38;&#x3002;&#x5BF9;&#x4E8E;Lock.lock&#x65B9;&#x6CD5;&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x6539;&#x9020;&#x6210;Lock.lockInterruptibly&#x65B9;&#x6CD5;&#x53BB;&#x5B9E;&#x73B0;&#x3002;</p>
<h2 id="&#x5728;java&#x4E2D;cyclibarriar&#x548C;countdownlatch&#x6709;&#x4EC0;&#x4E48;&#x533A;&#x522B;&#xFF1F;"><a name="&#x5728;java&#x4E2D;cyclibarriar&#x548C;countdownlatch&#x6709;&#x4EC0;&#x4E48;&#x533A;&#x522B;&#xFF1F;" class="anchor-navigation-ex-anchor" href="#&#x5728;java&#x4E2D;cyclibarriar&#x548C;countdownlatch&#x6709;&#x4EC0;&#x4E48;&#x533A;&#x522B;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x5728;java&#x4E2D;cyclibarriar&#x548C;countdownlatch&#x6709;&#x4EC0;&#x4E48;&#x533A;&#x522B;&#xFF1F;" class="plugin-anchor" href="#&#x5728;java&#x4E2D;cyclibarriar&#x548C;countdownlatch&#x6709;&#x4EC0;&#x4E48;&#x533A;&#x522B;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x5728;Java&#x4E2D;CycliBarriar&#x548C;CountdownLatch&#x6709;&#x4EC0;&#x4E48;&#x533A;&#x522B;&#xFF1F;</h2>
<p>&#x8FD9;&#x4E2A;&#x7EBF;&#x7A0B;&#x95EE;&#x9898;&#x4E3B;&#x8981;&#x7528;&#x6765;&#x68C0;&#x6D4B;&#x4F60;&#x662F;&#x5426;&#x719F;&#x6089;JDK5&#x4E2D;&#x7684;&#x5E76;&#x53D1;&#x5305;&#x3002;&#x8FD9;&#x4E24;&#x4E2A;&#x7684;&#x533A;&#x522B;&#x662F;CyclicBarrier&#x53EF;&#x4EE5;&#x91CD;&#x590D;&#x4F7F;&#x7528;&#x5DF2;&#x7ECF;&#x901A;&#x8FC7;&#x7684;&#x969C;&#x788D;&#xFF0C;&#x800C;CountdownLatch&#x4E0D;&#x80FD;&#x91CD;&#x590D;&#x4F7F;&#x7528;&#x3002;</p>
<p>&#x8FD8;&#x8981;&#x6CE8;&#x610F;&#x4E00;&#x70B9;&#x7684;&#x533A;&#x522B;&#xFF1A;
CountDownLatch : &#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;(&#x6216;&#x8005;&#x591A;&#x4E2A;)&#xFF0C; &#x7B49;&#x5F85;&#x53E6;&#x5916;N&#x4E2A;&#x7EBF;&#x7A0B;&#x5B8C;&#x6210;&#x67D0;&#x4E2A;&#x4E8B;&#x60C5;&#x4E4B;&#x540E;&#x624D;&#x80FD;&#x6267;&#x884C;&#x3002;
CyclicBarrier : N&#x4E2A;&#x7EBF;&#x7A0B;&#x76F8;&#x4E92;&#x7B49;&#x5F85;&#xFF0C;&#x4EFB;&#x4F55;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x5B8C;&#x6210;&#x4E4B;&#x524D;&#xFF0C;&#x6240;&#x6709;&#x7684;&#x7EBF;&#x7A0B;&#x90FD;&#x5FC5;&#x987B;&#x7B49;&#x5F85;&#x3002;
&#x8FD9;&#x6837;&#x5E94;&#x8BE5;&#x5C31;&#x6E05;&#x695A;&#x4E00;&#x70B9;&#x4E86;&#xFF0C;&#x5BF9;&#x4E8E;CountDownLatch&#x6765;&#x8BF4;&#xFF0C;&#x91CD;&#x70B9;&#x662F;&#x90A3;&#x4E2A;&#x201C;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x201D;, &#x662F;&#x5B83;&#x5728;&#x7B49;&#x5F85;&#xFF0C;&#x800C;&#x53E6;&#x5916;&#x90A3;N&#x7684;&#x7EBF;&#x7A0B;&#x5728;&#x628A;&#x201C;&#x67D0;&#x4E2A;&#x4E8B;&#x60C5;&#x201D;&#x505A;&#x5B8C;&#x4E4B;&#x540E;&#x53EF;&#x4EE5;&#x7EE7;&#x7EED;&#x7B49;&#x5F85;&#xFF0C;&#x53EF;&#x4EE5;&#x7EC8;&#x6B62;&#x3002;&#x800C;&#x5BF9;&#x4E8E;CyclicBarrier&#x6765;&#x8BF4;&#xFF0C;&#x91CD;&#x70B9;&#x662F;&#x90A3;N&#x4E2A;&#x7EBF;&#x7A0B;&#xFF0C;&#x4ED6;&#x4EEC;&#x4E4B;&#x95F4;&#x4EFB;&#x4F55;&#x4E00;&#x4E2A;&#x6CA1;&#x6709;&#x5B8C;&#x6210;&#xFF0C;&#x6240;&#x6709;&#x7684;&#x7EBF;&#x7A0B;&#x90FD;&#x5FC5;&#x987B;&#x7B49;&#x5F85;&#x3002;
&#x4ECE;api&#x4E0A;&#x7406;&#x89E3;&#x5C31;&#x662F;CountdownLatch&#x6709;&#x4E3B;&#x8981;&#x914D;&#x5408;&#x4F7F;&#x7528;&#x4E24;&#x4E2A;&#x65B9;&#x6CD5;countDown()&#x548C;await()&#xFF0C;countDown()&#x662F;&#x505A;&#x4E8B;&#x7684;&#x7EBF;&#x7A0B;&#x7528;&#x7684;&#x65B9;&#x6CD5;&#xFF0C;await()&#x662F;&#x7B49;&#x5F85;&#x4E8B;&#x60C5;&#x5B8C;&#x6210;&#x7684;&#x7EBF;&#x7A0B;&#x7528;&#x4E2A;&#x65B9;&#x6CD5;&#xFF0C;&#x8FD9;&#x4E24;&#x79CD;&#x7EBF;&#x7A0B;&#x662F;&#x53EF;&#x4EE5;&#x5206;&#x5F00;&#x7684;(&#x4E0B;&#x9762;&#x4F8B;&#x5B50;:CountdownLatchTest2)&#xFF0C;&#x5F53;&#x7136;&#x4E5F;&#x53EF;&#x4EE5;&#x662F;&#x540C;&#x4E00;&#x7EC4;&#x7EBF;&#x7A0B;(&#x4E0B;&#x9762;&#x4F8B;&#x5B50;:CountdownLatchTest);CyclicBarrier&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x65B9;&#x6CD5;await(),&#x6307;&#x7684;&#x662F;&#x505A;&#x4E8B;&#x7EBF;&#x7A0B;&#x5FC5;&#x987B;&#x5927;&#x5BB6;&#x540C;&#x65F6;&#x7B49;&#x5F85;&#xFF0C;&#x5FC5;&#x987B;&#x662F;&#x540C;&#x4E00;&#x7EC4;&#x7EBF;&#x7A0B;&#x7684;&#x5DE5;&#x4F5C;&#x3002;</p>
<p>CountdownLatch&#x4F8B;&#x5B50;&#xFF1A;</p>
<pre><code>import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * &#x7EBF;&#x7A0B;&#x90FD;&#x51C6;&#x5907;&#x5B8C;&#x6210;&#x540E;&#x4E00;&#x8D77;&#x6267;&#x884C;&#x7684;&#x4F8B;&#x5B50;
 * @author xuexiaolei
 * @version 2017&#x5E74;11&#x6708;02&#x65E5;
 */
public class CountdownLatchTest {
    private final static int THREAD_NUM = 10;
    public static void main(String[] args) {
        CountDownLatch lock = new CountDownLatch(THREAD_NUM);
        ExecutorService exec = Executors.newCachedThreadPool();
        for (int i = 0; i &lt; THREAD_NUM; i++) {
            exec.submit(new CountdownLatchTask(lock, &quot;Thread-&quot;+i));
        }
        exec.shutdown();
    }

    static class CountdownLatchTask implements Runnable{
        private final CountDownLatch lock;
        private final String threadName;
        CountdownLatchTask(CountDownLatch lock, String threadName) {
            this.lock = lock;
            this.threadName = threadName;
        }
        @Override public void run() {
            //&#x5FAA;&#x73AF;&#x591A;&#x6B21;&#x662F;&#x4E3A;&#x4E86;&#x8BC1;&#x660E;&#xFF0C;CountdownLatch&#x53EA;&#x4F1A;&#x963B;&#x6321;&#x4E00;&#x6B21;
            for (int i = 0; i &lt; 3; i++) {
                System.out.println(threadName + &quot; &#x51C6;&#x5907;&#x5B8C;&#x6210;&quot;);
                lock.countDown();
                try {
                    lock.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(threadName + &quot; &#x6267;&#x884C;&#x5B8C;&#x6210;&quot;);
            }

        }
    }
}12345678910111213141516171819202122232425262728293031323334353637383940414243
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * &#x5404;&#x4E2A;&#x7EBF;&#x7A0B;&#x6267;&#x884C;&#x5B8C;&#x6210;&#x540E;&#xFF0C;&#x4E3B;&#x7EBF;&#x7A0B;&#x505A;&#x603B;&#x7ED3;&#x6027;&#x5DE5;&#x4F5C;&#x7684;&#x4F8B;&#x5B50;
 * @author xuexiaolei
 * @version 2017&#x5E74;11&#x6708;02&#x65E5;
 */
public class CountdownLatchTest2 {
    private final static int THREAD_NUM = 10;
    public static void main(String[] args) {
        CountDownLatch lock = new CountDownLatch(THREAD_NUM);
        ExecutorService exec = Executors.newCachedThreadPool();
        for (int i = 0; i &lt; THREAD_NUM; i++) {
            exec.submit(new CountdownLatchTask(lock, &quot;Thread-&quot;+i));
        }
        try {
            lock.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(&quot;&#x5927;&#x5BB6;&#x90FD;&#x6267;&#x884C;&#x5B8C;&#x6210;&#x4E86;&#xFF0C;&#x505A;&#x603B;&#x7ED3;&#x6027;&#x5DE5;&#x4F5C;&quot;);
        exec.shutdown();
    }

    static class CountdownLatchTask implements Runnable{
        private final CountDownLatch lock;
        private final String threadName;
        CountdownLatchTask(CountDownLatch lock, String threadName) {
            this.lock = lock;
            this.threadName = threadName;
        }
        @Override public void run() {
            System.out.println(threadName + &quot; &#x6267;&#x884C;&#x5B8C;&#x6210;&quot;);
            lock.countDown();
        }
    }
}123456789101112131415161718192021222324252627282930313233343536373839
</code></pre><p>CyclicBarrier&#x4F8B;&#x5B50;&#xFF1A;</p>
<pre><code>import java.util.concurrent.*;

/**
 *
 * @author xuexiaolei
 * @version 2017&#x5E74;11&#x6708;02&#x65E5;
 */
public class CyclicBarrierTest {
    private final static int THREAD_NUM = 10;
    public static void main(String[] args) {
        CyclicBarrier lock = new CyclicBarrier(THREAD_NUM, new Runnable() {
            @Override public void run() {
                System.out.println(&quot;&#x5927;&#x5BB6;&#x90FD;&#x51C6;&#x5907;&#x5B8C;&#x6210;&#x4E86;&quot;);
            }
        });
        ExecutorService exec = Executors.newCachedThreadPool();
        for (int i = 0; i &lt; THREAD_NUM; i++) {
            exec.submit(new CountdownLatchTask(lock, &quot;Thread-&quot;+i));
        }
        exec.shutdown();
    }

    static class CountdownLatchTask implements Runnable{
        private final CyclicBarrier lock;
        private final String threadName;
        CountdownLatchTask(CyclicBarrier lock, String threadName) {
            this.lock = lock;
            this.threadName = threadName;
        }
        @Override public void run() {
            for (int i = 0; i &lt; 3; i++) {
                System.out.println(threadName + &quot; &#x51C6;&#x5907;&#x5B8C;&#x6210;&quot;);
                try {
                    lock.await();
                } catch (BrokenBarrierException e) {
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(threadName + &quot; &#x6267;&#x884C;&#x5B8C;&#x6210;&quot;);
            }

        }
    }
}123456789101112131415161718192021222324252627282930313233343536373839404142434445
</code></pre><h2 id="&#x4EC0;&#x4E48;&#x662F;&#x4E0D;&#x53EF;&#x53D8;&#x5BF9;&#x8C61;&#xFF0C;&#x5B83;&#x5BF9;&#x5199;&#x5E76;&#x53D1;&#x5E94;&#x7528;&#x6709;&#x4EC0;&#x4E48;&#x5E2E;&#x52A9;&#xFF1F;"><a name="&#x4EC0;&#x4E48;&#x662F;&#x4E0D;&#x53EF;&#x53D8;&#x5BF9;&#x8C61;&#xFF0C;&#x5B83;&#x5BF9;&#x5199;&#x5E76;&#x53D1;&#x5E94;&#x7528;&#x6709;&#x4EC0;&#x4E48;&#x5E2E;&#x52A9;&#xFF1F;" class="anchor-navigation-ex-anchor" href="#&#x4EC0;&#x4E48;&#x662F;&#x4E0D;&#x53EF;&#x53D8;&#x5BF9;&#x8C61;&#xFF0C;&#x5B83;&#x5BF9;&#x5199;&#x5E76;&#x53D1;&#x5E94;&#x7528;&#x6709;&#x4EC0;&#x4E48;&#x5E2E;&#x52A9;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x4EC0;&#x4E48;&#x662F;&#x4E0D;&#x53EF;&#x53D8;&#x5BF9;&#x8C61;&#xFF0C;&#x5B83;&#x5BF9;&#x5199;&#x5E76;&#x53D1;&#x5E94;&#x7528;&#x6709;&#x4EC0;&#x4E48;&#x5E2E;&#x52A9;&#xFF1F;" class="plugin-anchor" href="#&#x4EC0;&#x4E48;&#x662F;&#x4E0D;&#x53EF;&#x53D8;&#x5BF9;&#x8C61;&#xFF0C;&#x5B83;&#x5BF9;&#x5199;&#x5E76;&#x53D1;&#x5E94;&#x7528;&#x6709;&#x4EC0;&#x4E48;&#x5E2E;&#x52A9;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x4EC0;&#x4E48;&#x662F;&#x4E0D;&#x53EF;&#x53D8;&#x5BF9;&#x8C61;&#xFF0C;&#x5B83;&#x5BF9;&#x5199;&#x5E76;&#x53D1;&#x5E94;&#x7528;&#x6709;&#x4EC0;&#x4E48;&#x5E2E;&#x52A9;&#xFF1F;</h2>
<p>&#x53E6;&#x4E00;&#x4E2A;&#x591A;&#x7EBF;&#x7A0B;&#x7ECF;&#x5178;&#x9762;&#x8BD5;&#x95EE;&#x9898;&#xFF0C;&#x5E76;&#x4E0D;&#x76F4;&#x63A5;&#x8DDF;&#x7EBF;&#x7A0B;&#x6709;&#x5173;&#xFF0C;&#x4F46;&#x95F4;&#x63A5;&#x5E2E;&#x52A9;&#x5F88;&#x591A;&#x3002;&#x8FD9;&#x4E2A;java&#x9762;&#x8BD5;&#x95EE;&#x9898;&#x53EF;&#x4EE5;&#x53D8;&#x7684;&#x975E;&#x5E38;&#x68D8;&#x624B;&#xFF0C;&#x5982;&#x679C;&#x4ED6;&#x8981;&#x6C42;&#x4F60;&#x5199;&#x4E00;&#x4E2A;&#x4E0D;&#x53EF;&#x53D8;&#x5BF9;&#x8C61;&#xFF0C;&#x6216;&#x8005;&#x95EE;&#x4F60;&#x4E3A;&#x4EC0;&#x4E48;String&#x662F;&#x4E0D;&#x53EF;&#x53D8;&#x7684;&#x3002;</p>
<p>immutable Objects(&#x4E0D;&#x53EF;&#x53D8;&#x5BF9;&#x8C61;)&#x5C31;&#x662F;&#x90A3;&#x4E9B;&#x4E00;&#x65E6;&#x88AB;&#x521B;&#x5EFA;&#xFF0C;&#x5B83;&#x4EEC;&#x7684;&#x72B6;&#x6001;&#x5C31;&#x4E0D;&#x80FD;&#x88AB;&#x6539;&#x53D8;&#x7684;Objects&#xFF0C;&#x6BCF;&#x6B21;&#x5BF9;&#x4ED6;&#x4EEC;&#x7684;&#x6539;&#x53D8;&#x90FD;&#x662F;&#x4EA7;&#x751F;&#x4E86;&#x65B0;&#x7684;immutable&#x7684;&#x5BF9;&#x8C61;&#xFF0C;&#x800C;mutable Objects(&#x53EF;&#x53D8;&#x5BF9;&#x8C61;)&#x5C31;&#x662F;&#x90A3;&#x4E9B;&#x521B;&#x5EFA;&#x540E;&#xFF0C;&#x72B6;&#x6001;&#x53EF;&#x4EE5;&#x88AB;&#x6539;&#x53D8;&#x7684;Objects.</p>
<p>&#x5982;&#x4F55;&#x5728;Java&#x4E2D;&#x5199;&#x51FA;Immutable&#x7684;&#x7C7B;&#xFF1F;
\1. immutable&#x5BF9;&#x8C61;&#x7684;&#x72B6;&#x6001;&#x5728;&#x521B;&#x5EFA;&#x4E4B;&#x540E;&#x5C31;&#x4E0D;&#x80FD;&#x53D1;&#x751F;&#x6539;&#x53D8;&#xFF0C;&#x4EFB;&#x4F55;&#x5BF9;&#x5B83;&#x7684;&#x6539;&#x53D8;&#x90FD;&#x5E94;&#x8BE5;&#x4EA7;&#x751F;&#x4E00;&#x4E2A;&#x65B0;&#x7684;&#x5BF9;&#x8C61;&#x3002;
\2. immutable&#x7C7B;&#x7684;&#x6240;&#x6709;&#x7684;&#x5C5E;&#x6027;&#x90FD;&#x5E94;&#x8BE5;&#x662F;final&#x7684;&#x3002;
\3. &#x5BF9;&#x8C61;&#x5FC5;&#x987B;&#x88AB;&#x6B63;&#x786E;&#x7684;&#x521B;&#x5EFA;&#xFF0C;&#x6BD4;&#x5982;&#xFF1A;&#x5BF9;&#x8C61;&#x5F15;&#x7528;&#x5728;&#x5BF9;&#x8C61;&#x521B;&#x5EFA;&#x8FC7;&#x7A0B;&#x4E2D;&#x4E0D;&#x80FD;&#x6CC4;&#x9732;(leak)&#x3002;
\4. &#x5BF9;&#x8C61;&#x5E94;&#x8BE5;&#x662F;final&#x7684;&#xFF0C;&#x4EE5;&#x6B64;&#x6765;&#x9650;&#x5236;&#x5B50;&#x7C7B;&#x7EE7;&#x627F;&#x7236;&#x7C7B;&#xFF0C;&#x4EE5;&#x907F;&#x514D;&#x5B50;&#x7C7B;&#x6539;&#x53D8;&#x4E86;&#x7236;&#x7C7B;&#x7684;immutable&#x7279;&#x6027;&#x3002;
\5. &#x5982;&#x679C;&#x7C7B;&#x4E2D;&#x5305;&#x542B;mutable&#x7C7B;&#x5BF9;&#x8C61;&#xFF0C;&#x90A3;&#x4E48;&#x8FD4;&#x56DE;&#x7ED9;&#x5BA2;&#x6237;&#x7AEF;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x8FD4;&#x56DE;&#x8BE5;&#x5BF9;&#x8C61;&#x7684;&#x4E00;&#x4E2A;&#x62F7;&#x8D1D;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x8BE5;&#x5BF9;&#x8C61;&#x672C;&#x8EAB;&#xFF08;&#x8BE5;&#x6761;&#x53EF;&#x4EE5;&#x5F52;&#x4E3A;&#x7B2C;&#x4E00;&#x6761;&#x4E2D;&#x7684;&#x4E00;&#x4E2A;&#x7279;&#x4F8B;&#xFF09;</p>
<p>&#x4F7F;&#x7528;Immutable&#x7C7B;&#x7684;&#x597D;&#x5904;&#xFF1A;
\1. Immutable&#x5BF9;&#x8C61;&#x662F;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x7684;&#xFF0C;&#x53EF;&#x4EE5;&#x4E0D;&#x7528;&#x88AB;synchronize&#x5C31;&#x5728;&#x5E76;&#x53D1;&#x73AF;&#x5883;&#x4E2D;&#x5171;&#x4EAB;
2.Immutable&#x5BF9;&#x8C61;&#x7B80;&#x5316;&#x4E86;&#x7A0B;&#x5E8F;&#x5F00;&#x53D1;&#xFF0C;&#x56E0;&#x4E3A;&#x5B83;&#x65E0;&#x9700;&#x4F7F;&#x7528;&#x989D;&#x5916;&#x7684;&#x9501;&#x673A;&#x5236;&#x5C31;&#x53EF;&#x4EE5;&#x5728;&#x7EBF;&#x7A0B;&#x95F4;&#x5171;&#x4EAB;
\3. Immutable&#x5BF9;&#x8C61;&#x63D0;&#x9AD8;&#x4E86;&#x7A0B;&#x5E8F;&#x7684;&#x6027;&#x80FD;&#xFF0C;&#x56E0;&#x4E3A;&#x5B83;&#x51CF;&#x5C11;&#x4E86;synchroinzed&#x7684;&#x4F7F;&#x7528;
\4. Immutable&#x5BF9;&#x8C61;&#x662F;&#x53EF;&#x4EE5;&#x88AB;&#x91CD;&#x590D;&#x4F7F;&#x7528;&#x7684;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x5C06;&#x5B83;&#x4EEC;&#x7F13;&#x5B58;&#x8D77;&#x6765;&#x91CD;&#x590D;&#x4F7F;&#x7528;&#xFF0C;&#x5C31;&#x50CF;&#x5B57;&#x7B26;&#x4E32;&#x5B57;&#x9762;&#x91CF;&#x548C;&#x6574;&#x578B;&#x6570;&#x5B57;&#x4E00;&#x6837;&#x3002;&#x4F60;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x9759;&#x6001;&#x5DE5;&#x5382;&#x65B9;&#x6CD5;&#x6765;&#x63D0;&#x4F9B;&#x7C7B;&#x4F3C;&#x4E8E;valueOf&#xFF08;&#xFF09;&#x8FD9;&#x6837;&#x7684;&#x65B9;&#x6CD5;&#xFF0C;&#x5B83;&#x53EF;&#x4EE5;&#x4ECE;&#x7F13;&#x5B58;&#x4E2D;&#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x5DF2;&#x7ECF;&#x5B58;&#x5728;&#x7684;Immutable&#x5BF9;&#x8C61;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x91CD;&#x65B0;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x3002;</p>
<pre><code>/**
 * &#x4E0D;&#x53EF;&#x53D8;&#x5BF9;&#x8C61;
 * @author xuexiaolei
 * @version 2017&#x5E74;11&#x6708;03&#x65E5;
 */
public class ImmutableObjectPerson {
    private final String name;
    private final String sex;

    public ImmutableObjectPerson(String name, String sex) {
        this.name = name;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }
    public String getSex() {
        return sex;
    }
}123456789101112131415161718192021
</code></pre><h2 id="&#x4F60;&#x5728;&#x591A;&#x7EBF;&#x7A0B;&#x73AF;&#x5883;&#x4E2D;&#x9047;&#x5230;&#x7684;&#x5E38;&#x89C1;&#x7684;&#x95EE;&#x9898;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;&#x4F60;&#x662F;&#x600E;&#x4E48;&#x89E3;&#x51B3;&#x5B83;&#x7684;&#xFF1F;"><a name="&#x4F60;&#x5728;&#x591A;&#x7EBF;&#x7A0B;&#x73AF;&#x5883;&#x4E2D;&#x9047;&#x5230;&#x7684;&#x5E38;&#x89C1;&#x7684;&#x95EE;&#x9898;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;&#x4F60;&#x662F;&#x600E;&#x4E48;&#x89E3;&#x51B3;&#x5B83;&#x7684;&#xFF1F;" class="anchor-navigation-ex-anchor" href="#&#x4F60;&#x5728;&#x591A;&#x7EBF;&#x7A0B;&#x73AF;&#x5883;&#x4E2D;&#x9047;&#x5230;&#x7684;&#x5E38;&#x89C1;&#x7684;&#x95EE;&#x9898;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;&#x4F60;&#x662F;&#x600E;&#x4E48;&#x89E3;&#x51B3;&#x5B83;&#x7684;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a><a name="&#x4F60;&#x5728;&#x591A;&#x7EBF;&#x7A0B;&#x73AF;&#x5883;&#x4E2D;&#x9047;&#x5230;&#x7684;&#x5E38;&#x89C1;&#x7684;&#x95EE;&#x9898;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;&#x4F60;&#x662F;&#x600E;&#x4E48;&#x89E3;&#x51B3;&#x5B83;&#x7684;&#xFF1F;" class="plugin-anchor" href="#&#x4F60;&#x5728;&#x591A;&#x7EBF;&#x7A0B;&#x73AF;&#x5883;&#x4E2D;&#x9047;&#x5230;&#x7684;&#x5E38;&#x89C1;&#x7684;&#x95EE;&#x9898;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;&#x4F60;&#x662F;&#x600E;&#x4E48;&#x89E3;&#x51B3;&#x5B83;&#x7684;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a>&#x4F60;&#x5728;&#x591A;&#x7EBF;&#x7A0B;&#x73AF;&#x5883;&#x4E2D;&#x9047;&#x5230;&#x7684;&#x5E38;&#x89C1;&#x7684;&#x95EE;&#x9898;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;&#x4F60;&#x662F;&#x600E;&#x4E48;&#x89E3;&#x51B3;&#x5B83;&#x7684;&#xFF1F;</h2>
<p>&#x591A;&#x7EBF;&#x7A0B;&#x548C;&#x5E76;&#x53D1;&#x7A0B;&#x5E8F;&#x4E2D;&#x5E38;&#x9047;&#x5230;&#x7684;&#x6709;Memory-interface&#x3001;&#x7ADE;&#x4E89;&#x6761;&#x4EF6;&#x3001;&#x6B7B;&#x9501;&#x3001;&#x6D3B;&#x9501;&#x548C;&#x9965;&#x997F;&#x3002;&#x95EE;&#x9898;&#x662F;&#x6CA1;&#x6709;&#x6B62;&#x5883;&#x7684;&#xFF0C;&#x5982;&#x679C;&#x4F60;&#x5F04;&#x9519;&#x4E86;&#xFF0C;&#x5C06;&#x5F88;&#x96BE;&#x53D1;&#x73B0;&#x548C;&#x8C03;&#x8BD5;&#x3002;&#x8FD9;&#x662F;&#x5927;&#x591A;&#x6570;&#x57FA;&#x4E8E;&#x9762;&#x8BD5;&#x7684;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x57FA;&#x4E8E;&#x5B9E;&#x9645;&#x5E94;&#x7528;&#x7684;Java&#x7EBF;&#x7A0B;&#x95EE;&#x9898;&#x3002;</p>
<p>&#x6B64;&#x7C7B;&#x95EE;&#x9898;&#x8BF7;&#x5927;&#x5BB6;&#x9762;&#x8BD5;&#x7684;&#x65F6;&#x5019;&#x63D0;&#x524D;&#x51C6;&#x5907;&#xFF0C;&#x65B9;&#x4FBF;&#x4EA4;&#x6D41;&#xFF0C;&#x5982;&#x679C;&#x5B9E;&#x5728;&#x627E;&#x4E0D;&#x51FA;&#x6765;&#xFF0C;&#x53EF;&#x4EE5;&#x60F3;&#x60F3;&#x81EA;&#x5DF1;&#x5E73;&#x65F6;&#x89E3;&#x51B3;&#x95EE;&#x9898;&#x7684;&#x601D;&#x8DEF;&#xFF0C;&#x603B;&#x7ED3;&#x4E0B;&#x6765;&#x544A;&#x8BC9;&#x8003;&#x5B98;&#x3002;</p>

<script>console.log("plugin-popup....");document.onclick = function(e){ e.target.tagName === "IMG" && window.open(e.target.src,e.target.src)}</script><style>img{cursor:pointer}</style>
                                
                                </section>
                            
    </div>
    <div class="search-results">
        <div class="has-results">
            
            <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
            <ul class="search-results-list"></ul>
            
        </div>
        <div class="no-results">
            
            <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
            
        </div>
    </div>
</div>

                        </div>
                    </div>
                
            </div>

            
                
                <a href="pond/1.线程池与底层原理.html" class="navigation navigation-prev " aria-label="Previous page: 11.线程池与底层原理.md">
                    <i class="fa fa-angle-left"></i>
                </a>
                
                
                <a href="10面试题二.html" class="navigation navigation-next " aria-label="Next page: 13.面试题二.md">
                    <i class="fa fa-angle-right"></i>
                </a>
                
            
        
    </div>

    <script>
        var gitbook = gitbook || [];
        gitbook.push(function() {
            gitbook.page.hasChanged({"page":{"title":"12.面试题一","level":"6.13","depth":1,"next":{"title":"13.面试题二.md","level":"6.14","depth":1,"path":"多线程/10面试题二.md","ref":"多线程/10面试题二.md","articles":[]},"previous":{"title":"11.线程池与底层原理.md","level":"6.12","depth":1,"path":"多线程/pond/1.线程池与底层原理.md","ref":"多线程/pond/1.线程池与底层原理.md","articles":[]},"dir":"ltr"},"config":{"plugins":["-sharing","splitter","expandable-chapters-small","anchors","sharing-plus","anchor-navigation-ex","favicon","expandable-chapters","toggle-chapters","back-to-top-button","code","-lunr","-search","search-pro","pageview-count","popup","livereload"],"styles":{"website":"./styles/website.css"},"pluginsConfig":{"livereload":{},"splitter":{},"search-pro":{},"sharing-plus":{"qq":false,"all":["facebook","google","twitter","instapaper","linkedin","pocket","stumbleupon"],"douban":false,"facebook":true,"weibo":false,"instapaper":false,"whatsapp":false,"hatenaBookmark":false,"twitter":true,"messenger":false,"line":false,"vk":false,"pocket":true,"google":false,"viber":false,"stumbleupon":false,"qzone":false,"linkedin":false},"popup":{},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"anchor-navigation-ex":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"favicon":{},"back-to-top-button":{},"pageview-count":{},"expandable-chapters-small":{},"sharing":{"qq":false,"all":["google","facebook","weibo","twitter","qq","qzone","linkedin","pocket"],"douban":false,"facebook":false,"weibo":false,"instapaper":false,"whatsapp":false,"hatenaBookmark":false,"twitter":false,"messenger":false,"line":false,"vk":false,"pocket":false,"google":false,"viber":false,"stumbleupon":false,"qzone":false,"linkedin":false},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"anchors":{},"toggle-chapters":{},"expandable-chapters":{}},"theme":"default","author":"hzh","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"计算机 ,java , 大数据 基础知识体系","language":"zh-hans","gitbook":"3.2.3"},"file":{"path":"多线程/10面试题一.md","mtime":"2020-12-17T11:01:37.958Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2020-12-30T11:12:56.611Z"},"basePath":"..","book":{"language":""}});
        });
    </script>
</div>

        
    <script src="../gitbook/gitbook.js"></script>
    <script src="../gitbook/theme.js"></script>
    
        
        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-expandable-chapters-small/expandable-chapters-small.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-sharing-plus/buttons.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-toggle-chapters/toggle.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-back-to-top-button/plugin.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-code/plugin.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-search-pro/jquery.mark.min.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-search-pro/search.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-pageview-count/plugin.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-livereload/plugin.js"></script>
        
    
        
        <script src="../gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
        
    

    </body>
</html>

